{
 "cells": [
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:50:03.102470Z",
     "start_time": "2024-09-20T03:50:03.098180Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 导入相关库\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from datetime import date\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_auc_score"
   ],
   "id": "f9d8ab331393e317",
   "outputs": [],
   "execution_count": 137
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:50:06.730917Z",
     "start_time": "2024-09-20T03:50:04.848993Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# ------------------------------------  第一部分 读取数据  --------------------------------------#\n",
    "off_train_data = pd.read_csv('ccf_offline_stage1_train.csv',encoding='utf-8')\n",
    "off_test_data = pd.read_csv('ccf_offline_stage1_test_revised.csv',encoding='utf-8')\n",
    "# 填充缺失值\n",
    "off_train_data = off_train_data.fillna('null')\n",
    "off_test_data = off_test_data.fillna('null')"
   ],
   "id": "c385c02f838a438e",
   "outputs": [],
   "execution_count": 138
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T06:35:35.992439Z",
     "start_time": "2024-09-20T06:35:35.892092Z"
    }
   },
   "cell_type": "code",
   "source": [
    "dups = off_train_data.duplicated().sum()\n",
    "print(dups)"
   ],
   "id": "9152fec5867d5e24",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n"
     ]
    }
   ],
   "execution_count": 166
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:50:11.598103Z",
     "start_time": "2024-09-20T03:50:11.593474Z"
    }
   },
   "cell_type": "code",
   "source": "off_train_data.shape[0]",
   "id": "d3d8014a5e3e9b10",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1754884"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 140
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:50:14.824519Z",
     "start_time": "2024-09-20T03:50:14.815068Z"
    }
   },
   "cell_type": "code",
   "source": "off_train_data.info()",
   "id": "73e1546e7fa6342",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1754884 entries, 0 to 1754883\n",
      "Data columns (total 7 columns):\n",
      " #   Column         Dtype \n",
      "---  ------         ----- \n",
      " 0   User_id        int64 \n",
      " 1   Merchant_id    int64 \n",
      " 2   Coupon_id      object\n",
      " 3   Discount_rate  object\n",
      " 4   Distance       object\n",
      " 5   Date_received  object\n",
      " 6   Date           object\n",
      "dtypes: int64(2), object(5)\n",
      "memory usage: 93.7+ MB\n"
     ]
    }
   ],
   "execution_count": 141
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:50:53.742762Z",
     "start_time": "2024-09-20T03:50:17.805305Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# 用label列标记分类，label的取值为1表示正样本，0表示负样本，-1表示普通用户\n",
    "def label(row):\n",
    "    if row['Date'] != 'null' and row['Date_received'] != 'null':\n",
    "        if row['Coupon_id'] != 'null':\n",
    "            # 优惠券id不为空，表示使用了优惠券购买\n",
    "            # 计算使用优惠券的日期差值\n",
    "            td = pd.to_datetime(row['Date'], format='%Y%m%d') - \\\n",
    "                 pd.to_datetime(row['Date_received'], format='%Y%m%d')\n",
    "            if td <= pd.Timedelta(15, 'D'):  # 判断使用优惠券是否在15天内\n",
    "                return 1\n",
    "            else:\n",
    "                return 0\n",
    "        else:\n",
    "            # 其他情况：优惠券id为null，表示没有使用优惠券购买\n",
    "            return 0\n",
    "    if row['Date'] == 'null' and row['Date_received'] != 'null':\n",
    "        return 0\n",
    "    else:\n",
    "        return -1\n",
    "# 标记label的值达到分类目的\n",
    "off_train_data['label'] = off_train_data.apply(label, axis = 1)\n",
    "off_train_data['label'].value_counts()\n",
    "''' \n",
    " 0    988887\n",
    "-1    701602\n",
    " 1     64395\n",
    "Name: label, dtype: int64\n",
    "'''\n",
    "off_train_data.columns\n",
    "'''\n",
    "Index(['User_id', 'Merchant_id', 'Coupon_id', 'Discount_rate', 'Distance',\n",
    "       'Date_received', 'Date', 'label'],\n",
    "      dtype='object')\n",
    "'''\n",
    "off_train_data"
   ],
   "id": "ea3d0dd3ee707c19",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "         User_id  Merchant_id Coupon_id Discount_rate Distance Date_received  \\\n",
       "0        1439408         2632      null          null      0.0          null   \n",
       "1        1439408         4663   11002.0        150:20      1.0    20160528.0   \n",
       "2        1439408         2632    8591.0          20:1      0.0    20160217.0   \n",
       "3        1439408         2632    1078.0          20:1      0.0    20160319.0   \n",
       "4        1439408         2632    8591.0          20:1      0.0    20160613.0   \n",
       "...          ...          ...       ...           ...      ...           ...   \n",
       "1754879   212662         3532      null          null      1.0          null   \n",
       "1754880   212662         3021    3739.0          30:1      6.0    20160508.0   \n",
       "1754881   212662         2934      null          null      2.0          null   \n",
       "1754882   752472         7113    1633.0         50:10      6.0    20160613.0   \n",
       "1754883   752472         3621    2705.0          20:5      0.0    20160523.0   \n",
       "\n",
       "               Date  label  \n",
       "0        20160217.0     -1  \n",
       "1              null      0  \n",
       "2              null      0  \n",
       "3              null      0  \n",
       "4              null      0  \n",
       "...             ...    ...  \n",
       "1754879  20160322.0     -1  \n",
       "1754880  20160602.0      0  \n",
       "1754881  20160321.0     -1  \n",
       "1754882        null      0  \n",
       "1754883        null      0  \n",
       "\n",
       "[1754884 rows x 8 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>null</td>\n",
       "      <td>null</td>\n",
       "      <td>0.0</td>\n",
       "      <td>null</td>\n",
       "      <td>20160217.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1439408</td>\n",
       "      <td>4663</td>\n",
       "      <td>11002.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>1.0</td>\n",
       "      <td>20160528.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>8591.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160217.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>1078.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160319.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1439408</td>\n",
       "      <td>2632</td>\n",
       "      <td>8591.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160613.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754879</th>\n",
       "      <td>212662</td>\n",
       "      <td>3532</td>\n",
       "      <td>null</td>\n",
       "      <td>null</td>\n",
       "      <td>1.0</td>\n",
       "      <td>null</td>\n",
       "      <td>20160322.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754880</th>\n",
       "      <td>212662</td>\n",
       "      <td>3021</td>\n",
       "      <td>3739.0</td>\n",
       "      <td>30:1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>20160508.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754881</th>\n",
       "      <td>212662</td>\n",
       "      <td>2934</td>\n",
       "      <td>null</td>\n",
       "      <td>null</td>\n",
       "      <td>2.0</td>\n",
       "      <td>null</td>\n",
       "      <td>20160321.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754882</th>\n",
       "      <td>752472</td>\n",
       "      <td>7113</td>\n",
       "      <td>1633.0</td>\n",
       "      <td>50:10</td>\n",
       "      <td>6.0</td>\n",
       "      <td>20160613.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1754883</th>\n",
       "      <td>752472</td>\n",
       "      <td>3621</td>\n",
       "      <td>2705.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160523.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1754884 rows × 8 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 142
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:50:54.109166Z",
     "start_time": "2024-09-20T03:50:53.744760Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "# ------------------------------------  第二部分 数据取样  --------------------------------------#\n",
    "# 随机抽样，按照正负样例1：1\n",
    "# 切片\n",
    "X = off_train_data.loc[:,off_train_data.columns != 'label']  # 数据\n",
    "y = off_train_data.loc[:,off_train_data.columns == 'label']  # 标签\n",
    "# 获取类1标签的长度\n",
    "count_one_Class = len(off_train_data[off_train_data['label'] == 1])\n",
    "# 获取两类标签的索引\n",
    "one_Class_index = off_train_data[off_train_data['label'] == 1].index\n",
    "zero_Class_index = off_train_data[off_train_data['label'] == 0].index\n",
    "# 随机选择相同数目的索引\n",
    "np.random.seed(25)  # 定义随机种子\n",
    "random_zero_index = np.array(np.random.choice(zero_Class_index,count_one_Class,replace=True))\n",
    "# 正负样本 1:10\n",
    "# random_zero_index = np.array(np.random.choice(zero_Class_index,count_one_Class*10,replace=True))\n",
    "\n",
    "# 合并模型样本索引\n",
    "sample = np.concatenate([one_Class_index,random_zero_index])\n",
    "# 按照索引获取行\n",
    "off_train_data = off_train_data.loc[sample,:]\n",
    "# 打印结果对比\n",
    "print('label为1的数目：', len(one_Class_index))\n",
    "print('label为0的数目：', len(zero_Class_index))\n",
    "print('总数：', len(one_Class_index) + len(zero_Class_index))\n",
    "print('抽样label为1的数目：', len(one_Class_index))\n",
    "print('随机抽取label为0的数目：', len(random_zero_index))\n",
    "print('抽样总数：', len(one_Class_index) + len(random_zero_index))\n",
    "print('总样本形状：', off_train_data.shape)"
   ],
   "id": "208b0a0c0aa8a349",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "label为1的数目： 64395\n",
      "label为0的数目： 988887\n",
      "总数： 1053282\n",
      "抽样label为1的数目： 64395\n",
      "随机抽取label为0的数目： 64395\n",
      "抽样总数： 128790\n",
      "总样本形状： (128790, 8)\n"
     ]
    }
   ],
   "execution_count": 143
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:50:59.059635Z",
     "start_time": "2024-09-20T03:50:58.862435Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ------------------------------------  第三部分 数据探索  --------------------------------------#\n",
    "# 探索性分析\n",
    "off_train_data.value_counts()"
   ],
   "id": "783aadefe3fb71b5",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "User_id  Merchant_id  Coupon_id  Discount_rate  Distance  Date_received  Date        label\n",
       "5625260  5341         11539.0    30:5           0.0       20160214.0     20160214.0  1        10\n",
       "2692738  5341         11539.0    30:5           0.0       20160207.0     20160209.0  1         9\n",
       "2956333  4142         4773.0     100:10         0.0       20160219.0     20160219.0  1         8\n",
       "687544   5341         11539.0    30:5           0.0       20160128.0     20160131.0  1         6\n",
       "2692738  5341         11539.0    30:5           0.0       20160207.0     20160208.0  1         6\n",
       "                                                                                              ..\n",
       "2521107  58           10364.0    50:5           0.0       20160326.0     20160406.0  1         1\n",
       "2520969  5341         111.0      30:5           0.0       20160207.0     null        0         1\n",
       "2520933  6486         2494.0     100:10         6.0       20160119.0     null        0         1\n",
       "         6424         1315.0     100:10         null      20160119.0     null        0         1\n",
       "7360941  6485         10323.0    20:5           0.0       20160325.0     20160327.0  1         1\n",
       "Name: count, Length: 124320, dtype: int64"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 144
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:52:34.367239Z",
     "start_time": "2024-09-20T02:52:34.362123Z"
    }
   },
   "cell_type": "code",
   "source": "off_train_data.shape[0]",
   "id": "61ccdba2b004dd11",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "708345"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 115
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:02.670894Z",
     "start_time": "2024-09-20T03:51:02.419911Z"
    }
   },
   "cell_type": "code",
   "source": [
    "off_train_data.drop_duplicates(inplace=True)\n",
    "off_train_data.duplicated().sum()"
   ],
   "id": "bf0751b68dd2ab01",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 145
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:04.034622Z",
     "start_time": "2024-09-20T03:51:03.984017Z"
    }
   },
   "cell_type": "code",
   "source": "off_train_data.isnull().sum()",
   "id": "f1090377773a3fdf",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "User_id          0\n",
       "Merchant_id      0\n",
       "Coupon_id        0\n",
       "Discount_rate    0\n",
       "Distance         0\n",
       "Date_received    0\n",
       "Date             0\n",
       "label            0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 146
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:06.341145Z",
     "start_time": "2024-09-20T03:51:06.328961Z"
    }
   },
   "cell_type": "code",
   "source": "off_train_data",
   "id": "e856ec304f9a09ad",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "         User_id  Merchant_id Coupon_id Discount_rate Distance Date_received  \\\n",
       "33       1113008         1361   11166.0          20:1      0.0    20160515.0   \n",
       "38       2881376         8390    7531.0          20:5      0.0    20160321.0   \n",
       "69        114747         6901    2366.0          30:5      0.0    20160523.0   \n",
       "76        114747         5341     111.0          30:5      0.0    20160207.0   \n",
       "77        114747         5341    7751.0         50:10      0.0    20160127.0   \n",
       "...          ...          ...       ...           ...      ...           ...   \n",
       "1406393  7022032         3381   11951.0        200:20      8.0    20160129.0   \n",
       "701480   2405922         1569    5054.0        200:30      4.0    20160330.0   \n",
       "332686   2621253          450    8555.0          30:5     10.0    20160204.0   \n",
       "667768   1475575         5256   10219.0          30:5     null    20160428.0   \n",
       "101352   6135816         2709    2840.0        100:10      5.0    20160127.0   \n",
       "\n",
       "               Date  label  \n",
       "33       20160521.0      1  \n",
       "38       20160329.0      1  \n",
       "69       20160605.0      1  \n",
       "76       20160218.0      1  \n",
       "77       20160128.0      1  \n",
       "...             ...    ...  \n",
       "1406393        null      0  \n",
       "701480         null      0  \n",
       "332686         null      0  \n",
       "667768         null      0  \n",
       "101352         null      0  \n",
       "\n",
       "[124320 rows x 8 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>2881376</td>\n",
       "      <td>8390</td>\n",
       "      <td>7531.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160321.0</td>\n",
       "      <td>20160329.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>114747</td>\n",
       "      <td>6901</td>\n",
       "      <td>2366.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160523.0</td>\n",
       "      <td>20160605.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>114747</td>\n",
       "      <td>5341</td>\n",
       "      <td>111.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160207.0</td>\n",
       "      <td>20160218.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>114747</td>\n",
       "      <td>5341</td>\n",
       "      <td>7751.0</td>\n",
       "      <td>50:10</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20160127.0</td>\n",
       "      <td>20160128.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1406393</th>\n",
       "      <td>7022032</td>\n",
       "      <td>3381</td>\n",
       "      <td>11951.0</td>\n",
       "      <td>200:20</td>\n",
       "      <td>8.0</td>\n",
       "      <td>20160129.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>701480</th>\n",
       "      <td>2405922</td>\n",
       "      <td>1569</td>\n",
       "      <td>5054.0</td>\n",
       "      <td>200:30</td>\n",
       "      <td>4.0</td>\n",
       "      <td>20160330.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>332686</th>\n",
       "      <td>2621253</td>\n",
       "      <td>450</td>\n",
       "      <td>8555.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>10.0</td>\n",
       "      <td>20160204.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>667768</th>\n",
       "      <td>1475575</td>\n",
       "      <td>5256</td>\n",
       "      <td>10219.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>null</td>\n",
       "      <td>20160428.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101352</th>\n",
       "      <td>6135816</td>\n",
       "      <td>2709</td>\n",
       "      <td>2840.0</td>\n",
       "      <td>100:10</td>\n",
       "      <td>5.0</td>\n",
       "      <td>20160127.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>124320 rows × 8 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 147
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:09.261630Z",
     "start_time": "2024-09-20T03:51:09.131445Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 变换距离的类型，缺失值替换为-1\n",
    "off_train_data['Distance'] = off_train_data['Distance'].replace('null', -1).astype(int)\n",
    "off_test_data['Distance'] = off_test_data['Distance'].replace('null', -1).astype(int)\n",
    "print('查看缺失值结果：\\n',off_train_data.isnull().sum())\n",
    "# 描述性统计分析\n",
    "description = off_train_data.describe()\n",
    "# 依次计算极差值、变异系数、四分位数间距\n",
    "# 极差值  极差值是最大值与最小值之差，用于衡量数据的变异性。\n",
    "description.loc['range'] = description.loc['max'] - description.loc['min']\n",
    "# 变异系数是标准差与平均数的比值，通常用百分比表示，用于衡量相对变异性\n",
    "description.loc['var'] = description.loc['std'] - description.loc['mean']\n",
    "# 四分位数间距是第三四分位数（75%）与第一四分位数（25%）之差，用于描述数据中间50%的分布范围\n",
    "description.loc['dis'] = description.loc['75%'] - description.loc['25%']\n",
    "print('描述性统计结果：\\n',np.round(description, 2))  # 保留两位小数"
   ],
   "id": "b98a19ea23b6a5a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "查看缺失值结果：\n",
      " User_id          0\n",
      "Merchant_id      0\n",
      "Coupon_id        0\n",
      "Discount_rate    0\n",
      "Distance         0\n",
      "Date_received    0\n",
      "Date             0\n",
      "label            0\n",
      "dtype: int64\n",
      "描述性统计结果：\n",
      "           User_id  Merchant_id   Distance     label\n",
      "count   124320.00    124320.00  124320.00  124320.0\n",
      "mean   3698029.44      4059.61       1.86       0.5\n",
      "std    2123678.69      2473.26       3.36       0.5\n",
      "min        110.00         3.00      -1.00       0.0\n",
      "25%    1859184.00      1941.00       0.00       0.0\n",
      "50%    3699399.50      3621.00       0.00       0.0\n",
      "75%    5543647.50      6424.00       2.00       1.0\n",
      "max    7360941.00      8856.00      10.00       1.0\n",
      "range  7360831.00      8853.00      11.00       1.0\n",
      "var   -1574350.75     -1586.36       1.50       0.0\n",
      "dis    3684463.50      4483.00       2.00       1.0\n"
     ]
    }
   ],
   "execution_count": 148
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:16.184393Z",
     "start_time": "2024-09-20T03:51:16.176072Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ------------------------------------  第四部分 数据预处理  --------------------------------------#\n",
    "# 属性构造\n",
    "# 定义函数处理折扣率\n",
    "def convertRate(row):\n",
    "    if row == 'null':\n",
    "        return 1.0\n",
    "    elif ':' in str(row):\n",
    "        rows = row.split(':')\n",
    "        return 1.0 - float(rows[1]) / float(rows[0])\n",
    "    else:\n",
    "        return float(row)\n",
    "# 定义函数处理折扣率类型\n",
    "def getDiscountType(row):\n",
    "    if row == -1:\n",
    "        return -1\n",
    "    elif ':' in row:\n",
    "        # 满多少减多少\n",
    "        return 1\n",
    "    else:\n",
    "        # 折扣率\n",
    "        return 0\n",
    "# 定义函数处理满减类型的折扣优惠券\n",
    "def Man_Rate(row):\n",
    "    if row == -1:\n",
    "        return 0\n",
    "    elif ':' in str(row):\n",
    "        rows = row.split(':')\n",
    "        return int(rows[0])\n",
    "    else:\n",
    "        return 0\n",
    "def Jian_Rate(row):\n",
    "    if row == -1:\n",
    "        return 0\n",
    "    elif ':' in str(row):\n",
    "        rows = row.split(':')\n",
    "        return int(rows[1])\n",
    "    else:\n",
    "        return 0\n"
   ],
   "id": "959bdc1809523ad8",
   "outputs": [],
   "execution_count": 149
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:19.879828Z",
     "start_time": "2024-09-20T03:51:19.033034Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 调用函数构建跟折扣率相关的四个特征属性\n",
    "# 处理训练集折扣率数据\n",
    "off_train_data['Dis_rate'] = off_train_data['Discount_rate'].apply(convertRate)\n",
    "# off_train_data['Dis_rate']\n",
    "off_train_data['Discount_type'] = off_train_data['Discount_rate'].apply(getDiscountType)\n",
    "# off_train_data['Discount_type']\n",
    "off_train_data['Discount_man'] = off_train_data['Discount_rate'].apply(Man_Rate)\n",
    "off_train_data['Discount_man']\n",
    "off_train_data['Discount_jian'] = off_train_data['Discount_rate'].apply(Jian_Rate)\n",
    "off_train_data['Discount_jian']\n",
    "\n",
    "# 处理测试集折扣率数据\n",
    "off_test_data['Dis_rate'] = off_test_data['Discount_rate'].apply(convertRate)\n",
    "off_test_data['Discount_type'] = off_test_data['Discount_rate'].apply(getDiscountType)\n",
    "off_test_data['Discount_man'] = off_test_data['Discount_rate'].apply(Man_Rate)\n",
    "off_test_data['Discount_jian'] = off_test_data['Discount_rate'].apply(Jian_Rate)\n",
    "off_test_data['Discount_jian'] \n",
    "# '''\n",
    "# # 保存文件，方便下次读取操作\n",
    "# off_train_data.to_csv('./final_off_train_data.csv')\n",
    "# off_test_data.to_csv('./final_off_test_data.csv')\n",
    "# # 读取保存的文件\n",
    "# off_train_data = pd.read_csv('./final_off_train_data.csv',index_col=0)\n",
    "# off_test_data = pd.read_csv('./final_off_test_data.csv',index_col=0)\n",
    "# '''\n",
    "# 根据label标签来提取正、负样本的全部数据\n",
    "data = off_train_data[off_train_data['label'] != -1]\n",
    "data = data.fillna(-1)\n",
    "data['label'].value_counts()\n"
   ],
   "id": "5427525b622e6d05",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "label\n",
       "0    62167\n",
       "1    62153\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 150
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:53:07.139430Z",
     "start_time": "2024-09-20T02:53:07.121888Z"
    }
   },
   "cell_type": "code",
   "source": "data",
   "id": "4f89f25385652588",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "         User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "33       1113008         1361    11166.0          20:1         0   \n",
       "38       2881376         8390     7531.0          20:5         0   \n",
       "69        114747         6901     2366.0          30:5         0   \n",
       "76        114747         5341      111.0          30:5         0   \n",
       "77        114747         5341     7751.0         50:10         0   \n",
       "...          ...          ...        ...           ...       ...   \n",
       "1404145  1821042         7206     5852.0          30:5         0   \n",
       "449932   4990394         5413     4889.0        100:20         0   \n",
       "344342   7233242         5928     1161.0          20:1         0   \n",
       "1363154  2040144         7243     8270.0        100:20         4   \n",
       "1035175  4031713         7113     1808.0        100:10         2   \n",
       "\n",
       "         Date_received        Date  label  Dis_rate  Discount_type  \\\n",
       "33          20160515.0  20160521.0      1  0.950000              1   \n",
       "38          20160321.0  20160329.0      1  0.750000              1   \n",
       "69          20160523.0  20160605.0      1  0.833333              1   \n",
       "76          20160207.0  20160218.0      1  0.833333              1   \n",
       "77          20160127.0  20160128.0      1  0.800000              1   \n",
       "...                ...         ...    ...       ...            ...   \n",
       "1404145     20160524.0        null      0  0.833333              1   \n",
       "449932      20160612.0        null      0  0.800000              1   \n",
       "344342      20160326.0        null      0  0.950000              1   \n",
       "1363154     20160125.0        null      0  0.800000              1   \n",
       "1035175     20160514.0        null      0  0.900000              1   \n",
       "\n",
       "         Discount_man  Discount_jian  \n",
       "33                 20              1  \n",
       "38                 20              5  \n",
       "69                 30              5  \n",
       "76                 30              5  \n",
       "77                 50             10  \n",
       "...               ...            ...  \n",
       "1404145            30              5  \n",
       "449932            100             20  \n",
       "344342             20              1  \n",
       "1363154           100             20  \n",
       "1035175           100             10  \n",
       "\n",
       "[526987 rows x 12 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>Discount_man</th>\n",
       "      <th>Discount_jian</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>2881376</td>\n",
       "      <td>8390</td>\n",
       "      <td>7531.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160321.0</td>\n",
       "      <td>20160329.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>114747</td>\n",
       "      <td>6901</td>\n",
       "      <td>2366.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160523.0</td>\n",
       "      <td>20160605.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>114747</td>\n",
       "      <td>5341</td>\n",
       "      <td>111.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160207.0</td>\n",
       "      <td>20160218.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>114747</td>\n",
       "      <td>5341</td>\n",
       "      <td>7751.0</td>\n",
       "      <td>50:10</td>\n",
       "      <td>0</td>\n",
       "      <td>20160127.0</td>\n",
       "      <td>20160128.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>1</td>\n",
       "      <td>50</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1404145</th>\n",
       "      <td>1821042</td>\n",
       "      <td>7206</td>\n",
       "      <td>5852.0</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>449932</th>\n",
       "      <td>4990394</td>\n",
       "      <td>5413</td>\n",
       "      <td>4889.0</td>\n",
       "      <td>100:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160612.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>344342</th>\n",
       "      <td>7233242</td>\n",
       "      <td>5928</td>\n",
       "      <td>1161.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160326.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1363154</th>\n",
       "      <td>2040144</td>\n",
       "      <td>7243</td>\n",
       "      <td>8270.0</td>\n",
       "      <td>100:20</td>\n",
       "      <td>4</td>\n",
       "      <td>20160125.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1035175</th>\n",
       "      <td>4031713</td>\n",
       "      <td>7113</td>\n",
       "      <td>1808.0</td>\n",
       "      <td>100:10</td>\n",
       "      <td>2</td>\n",
       "      <td>20160514.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>526987 rows × 12 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 122
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:22.787899Z",
     "start_time": "2024-09-20T03:51:22.311579Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 获取领券日期是星期几，并且构建成特征\n",
    "def getWeekday(row):\n",
    "    if row == 'null':\n",
    "        return row\n",
    "    else:\n",
    "        # 星期一是0，星期二是1，依此类推，直到星期日是6。  所以要 +1\n",
    "        return date(int(row[0:4]),int(row[4:6]),int(row[6:8])).weekday()+1\n",
    " \n",
    "data['Weekday'] = data['Date_received'].astype(str).apply(getWeekday)\n",
    "off_test_data['Weekday'] = off_test_data['Date_received'].astype(str).apply(getWeekday)\n",
    "# 周六日为类型1，其他为0\n",
    "data['Is_weekend'] = data['Weekday'].apply(lambda x: 1 if x in [6,7] else 0)\n",
    "off_test_data['Is_weekend'] = off_test_data['Weekday'].apply(lambda x: 1 if x in [6,7] else 0)\n",
    "data['Is_weekend']"
   ],
   "id": "83199d7ef9f23171",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "33         1\n",
       "38         0\n",
       "69         0\n",
       "76         1\n",
       "77         0\n",
       "          ..\n",
       "1406393    0\n",
       "701480     0\n",
       "332686     0\n",
       "667768     0\n",
       "101352     0\n",
       "Name: Is_weekend, Length: 124320, dtype: int64"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 151
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:24.751720Z",
     "start_time": "2024-09-20T03:51:24.702728Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 跟星期相关的独热编码\n",
    "def One_hot(df):\n",
    "    weekdaycols = ['weekday' + str(i) for i in range(1,8)]\n",
    "    # 将分类变量（categorical variable）转换为哑变量（dummy variable）或指示变量（indicator variable）。它将每个唯一的类别值转换为一个列，列中的值要么是0，要么是1，其中1表示该行属于该类别。\n",
    "    tmpdf = pd.get_dummies(df['Weekday'].replace('null', np.nan))\n",
    "    # 将星期几bool类型的值转为数值类型\n",
    "    tmpdf = tmpdf.astype(int)\n",
    "    tmpdf.columns = weekdaycols\n",
    "    df[weekdaycols] = tmpdf\n",
    "    return df\n",
    "data = One_hot(data)\n",
    "data\n",
    "off_test_data = One_hot(off_test_data)\n",
    "off_test_data\n"
   ],
   "id": "ab14e9c627d0b46b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       4129537          450       9983          30:5         1   \n",
       "1       6949378         1300       3429          30:5        -1   \n",
       "2       2166529         7113       6928        200:20         5   \n",
       "3       2166529         7113       1808        100:10         5   \n",
       "4       6172162         7605       6500          30:1         2   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "113635  5828093         5717      10418          30:5        10   \n",
       "113636  6626813         1699       7595          30:1        -1   \n",
       "113637  6626813         7321       7590          50:5        -1   \n",
       "113638  4547069          760      13602          30:5         0   \n",
       "113639  6675965         7487        613          20:1         5   \n",
       "\n",
       "        Date_received  Dis_rate  Discount_type  Discount_man  Discount_jian  \\\n",
       "0            20160712  0.833333              1            30              5   \n",
       "1            20160706  0.833333              1            30              5   \n",
       "2            20160727  0.900000              1           200             20   \n",
       "3            20160727  0.900000              1           100             10   \n",
       "4            20160708  0.966667              1            30              1   \n",
       "...               ...       ...            ...           ...            ...   \n",
       "113635       20160716  0.833333              1            30              5   \n",
       "113636       20160707  0.966667              1            30              1   \n",
       "113637       20160712  0.900000              1            50              5   \n",
       "113638       20160717  0.833333              1            30              5   \n",
       "113639       20160728  0.950000              1            20              1   \n",
       "\n",
       "        Weekday  Is_weekend  weekday1  weekday2  weekday3  weekday4  weekday5  \\\n",
       "0             2           0         0         1         0         0         0   \n",
       "1             3           0         0         0         1         0         0   \n",
       "2             3           0         0         0         1         0         0   \n",
       "3             3           0         0         0         1         0         0   \n",
       "4             5           0         0         0         0         0         1   \n",
       "...         ...         ...       ...       ...       ...       ...       ...   \n",
       "113635        6           1         0         0         0         0         0   \n",
       "113636        4           0         0         0         0         1         0   \n",
       "113637        2           0         0         1         0         0         0   \n",
       "113638        7           1         0         0         0         0         0   \n",
       "113639        4           0         0         0         0         1         0   \n",
       "\n",
       "        weekday6  weekday7  \n",
       "0              0         0  \n",
       "1              0         0  \n",
       "2              0         0  \n",
       "3              0         0  \n",
       "4              0         0  \n",
       "...          ...       ...  \n",
       "113635         1         0  \n",
       "113636         0         0  \n",
       "113637         0         0  \n",
       "113638         0         1  \n",
       "113639         0         0  \n",
       "\n",
       "[113640 rows x 19 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>Discount_man</th>\n",
       "      <th>Discount_jian</th>\n",
       "      <th>Weekday</th>\n",
       "      <th>Is_weekend</th>\n",
       "      <th>weekday1</th>\n",
       "      <th>weekday2</th>\n",
       "      <th>weekday3</th>\n",
       "      <th>weekday4</th>\n",
       "      <th>weekday5</th>\n",
       "      <th>weekday6</th>\n",
       "      <th>weekday7</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4129537</td>\n",
       "      <td>450</td>\n",
       "      <td>9983</td>\n",
       "      <td>30:5</td>\n",
       "      <td>1</td>\n",
       "      <td>20160712</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6949378</td>\n",
       "      <td>1300</td>\n",
       "      <td>3429</td>\n",
       "      <td>30:5</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160706</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2166529</td>\n",
       "      <td>7113</td>\n",
       "      <td>6928</td>\n",
       "      <td>200:20</td>\n",
       "      <td>5</td>\n",
       "      <td>20160727</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2166529</td>\n",
       "      <td>7113</td>\n",
       "      <td>1808</td>\n",
       "      <td>100:10</td>\n",
       "      <td>5</td>\n",
       "      <td>20160727</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6172162</td>\n",
       "      <td>7605</td>\n",
       "      <td>6500</td>\n",
       "      <td>30:1</td>\n",
       "      <td>2</td>\n",
       "      <td>20160708</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113635</th>\n",
       "      <td>5828093</td>\n",
       "      <td>5717</td>\n",
       "      <td>10418</td>\n",
       "      <td>30:5</td>\n",
       "      <td>10</td>\n",
       "      <td>20160716</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113636</th>\n",
       "      <td>6626813</td>\n",
       "      <td>1699</td>\n",
       "      <td>7595</td>\n",
       "      <td>30:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160707</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113637</th>\n",
       "      <td>6626813</td>\n",
       "      <td>7321</td>\n",
       "      <td>7590</td>\n",
       "      <td>50:5</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160712</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>50</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113638</th>\n",
       "      <td>4547069</td>\n",
       "      <td>760</td>\n",
       "      <td>13602</td>\n",
       "      <td>30:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160717</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113639</th>\n",
       "      <td>6675965</td>\n",
       "      <td>7487</td>\n",
       "      <td>613</td>\n",
       "      <td>20:1</td>\n",
       "      <td>5</td>\n",
       "      <td>20160728</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>113640 rows × 19 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 152
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:27.163109Z",
     "start_time": "2024-09-20T03:51:26.721557Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义函数得到另外相关的三个特征属性\n",
    "def func(data):\n",
    "    # 提取用户使用的优惠券的数量\n",
    "    f = data[['User_id', 'Coupon_id']]\n",
    "    f['rec_coupon'] = 1\n",
    "    f = f.groupby(['User_id']).agg('sum').reset_index()\n",
    " \n",
    "    # 全部优惠券的数目\n",
    "    f1 = data[['Coupon_id']]\n",
    "    l1 = len(f1)\n",
    "    f1['Number_coupon'] = 1\n",
    "    f1 = f1.groupby(['Coupon_id']).agg('sum').reset_index()\n",
    "    # 优惠券的流行度：每一种优惠券占全部优惠券的比例\n",
    "    f1['Coupon_popu'] = f1['Number_coupon']/l1\n",
    " \n",
    "    # 提取用户和商家\n",
    "    f2 = data[['User_id','Merchant_id']]\n",
    "    l2 = len(f2)\n",
    "    # 提取顾客去商家的数量\n",
    "    f2['Number_merchant'] = 1\n",
    "    f2 = f2.groupby(['Merchant_id']).agg('sum').reset_index()\n",
    "    # 商家的受欢迎度：商家的顾客（用户）占全部商家的顾客（用户）的比例\n",
    "    f2['Merchant_popu'] = f2['Number_merchant']/l2\n",
    " \n",
    "    # 合并特征属性\n",
    "    d0 = pd.merge(data, f[['User_id','rec_coupon']], on='User_id')\n",
    "    d1 = pd.merge(d0,f1[['Coupon_id','Coupon_popu']],on='Coupon_id')\n",
    "    d2 = pd.merge(d1,f2[['Merchant_id','Merchant_popu']],on=['Merchant_id'])\n",
    "    return d2\n",
    "# 调用以上函数构建相关的三个特征属性\n",
    "new_data = func(data)\n",
    "new_test_data = func(off_test_data)\n",
    "new_data"
   ],
   "id": "93ce4f799b49b7c2",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_988\\2871514971.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f['rec_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_988\\2871514971.py:11: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f1['Number_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_988\\2871514971.py:20: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f2['Number_merchant'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_988\\2871514971.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f['rec_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_988\\2871514971.py:11: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f1['Number_coupon'] = 1\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_988\\2871514971.py:20: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  f2['Number_merchant'] = 1\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "124315  5389427         1184     1857.0        150:20         0   \n",
       "124316     6896         2511      869.0          50:5         0   \n",
       "124317  6598279         2846    11348.0        100:30         2   \n",
       "124318   287650         2123     1453.0          20:1        -1   \n",
       "124319   490662         5176     3923.0          20:5         7   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "124315     20160521.0        null      0  0.866667              1  ...   \n",
       "124316     20160504.0        null      0  0.900000              1  ...   \n",
       "124317     20160522.0        null      0  0.700000              1  ...   \n",
       "124318     20160509.0        null      0  0.950000              1  ...   \n",
       "124319     20160418.0        null      0  0.750000              1  ...   \n",
       "\n",
       "        weekday1  weekday2  weekday3  weekday4  weekday5  weekday6  weekday7  \\\n",
       "0              0         0         0         0         0         0         1   \n",
       "1              1         0         0         0         0         0         0   \n",
       "2              0         0         0         0         0         0         1   \n",
       "3              1         0         0         0         0         0         0   \n",
       "4              0         0         0         0         0         1         0   \n",
       "...          ...       ...       ...       ...       ...       ...       ...   \n",
       "124315         0         0         0         0         0         1         0   \n",
       "124316         0         0         1         0         0         0         0   \n",
       "124317         0         0         0         0         0         0         1   \n",
       "124318         1         0         0         0         0         0         0   \n",
       "124319         1         0         0         0         0         0         0   \n",
       "\n",
       "        rec_coupon  Coupon_popu  Merchant_popu  \n",
       "0                1     0.000088       0.000088  \n",
       "1                2     0.000088       0.000088  \n",
       "2                2     0.000088       0.000088  \n",
       "3                3     0.000088       0.000088  \n",
       "4                3     0.000088       0.000088  \n",
       "...            ...          ...            ...  \n",
       "124315           1     0.000008       0.000008  \n",
       "124316           1     0.000008       0.000008  \n",
       "124317           1     0.000008       0.000008  \n",
       "124318           1     0.000008       0.000008  \n",
       "124319           1     0.000008       0.000008  \n",
       "\n",
       "[124320 rows x 24 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday1</th>\n",
       "      <th>weekday2</th>\n",
       "      <th>weekday3</th>\n",
       "      <th>weekday4</th>\n",
       "      <th>weekday5</th>\n",
       "      <th>weekday6</th>\n",
       "      <th>weekday7</th>\n",
       "      <th>rec_coupon</th>\n",
       "      <th>Coupon_popu</th>\n",
       "      <th>Merchant_popu</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124315</th>\n",
       "      <td>5389427</td>\n",
       "      <td>1184</td>\n",
       "      <td>1857.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124316</th>\n",
       "      <td>6896</td>\n",
       "      <td>2511</td>\n",
       "      <td>869.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160504.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124317</th>\n",
       "      <td>6598279</td>\n",
       "      <td>2846</td>\n",
       "      <td>11348.0</td>\n",
       "      <td>100:30</td>\n",
       "      <td>2</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124318</th>\n",
       "      <td>287650</td>\n",
       "      <td>2123</td>\n",
       "      <td>1453.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160509.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124319</th>\n",
       "      <td>490662</td>\n",
       "      <td>5176</td>\n",
       "      <td>3923.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>7</td>\n",
       "      <td>20160418.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>124320 rows × 24 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 153
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:30.218396Z",
     "start_time": "2024-09-20T03:51:29.975077Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义函数得到跟距离相关的特征属性\n",
    "def Get_mer_dis(new_data):\n",
    "    # 查看距离的类别数量\n",
    "    new_data['Distance'].value_counts()\n",
    "    # 提取用户-商家距离的数据集\n",
    "    md1 = new_data[new_data.Coupon_id != 'null'][['Merchant_id', 'Distance']]\n",
    "    md1.replace('null', -1, inplace=True)\n",
    "    md1.replace(-1, np.nan, inplace=True)\n",
    "    # 用户-商家的距离最小值\n",
    "    md2 = md1.groupby('Merchant_id').agg('min').reset_index()\n",
    "    md2.rename(columns={'Distance': 'merchant_min_distance'}, inplace=True)\n",
    "    # 用户-商家的距离最大值\n",
    "    md3 = md1.groupby('Merchant_id').agg('max').reset_index()\n",
    "    md3.rename(columns={'Distance': 'merchant_max_distance'}, inplace=True)\n",
    "    # 用户-商品的距离平均值\n",
    "    md4 = md1.groupby('Merchant_id').agg('mean').reset_index()\n",
    "    md4.rename(columns={'Distance': 'merchant_mean_distance'}, inplace=True)\n",
    "    # 用户-离商品的距离中位值\n",
    "    md5 = md1.groupby('Merchant_id').agg('median').reset_index()\n",
    "    md5.rename(columns={'Distance': 'merchant_median_distance'}, inplace=True)\n",
    "    # 将所有特征合并在一起\n",
    "    merchant_feature = pd.merge(md2, md3, on='Merchant_id', how='left')\n",
    "    merchant_feature = pd.merge(merchant_feature, md4, on='Merchant_id', how='left')\n",
    "    merchant_feature = pd.merge(merchant_feature, md5, on='Merchant_id', how='left')\n",
    "    new_data = pd.merge(new_data,merchant_feature,on='Merchant_id',how='left')\n",
    "    return new_data\n",
    "# 调用上边函数构建距离相关的特征属性\n",
    "new_data = Get_mer_dis(new_data)\n",
    "new_test_data = Get_mer_dis(new_test_data)\n",
    "new_data"
   ],
   "id": "a23ca7716597b546",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "124315  5389427         1184     1857.0        150:20         0   \n",
       "124316     6896         2511      869.0          50:5         0   \n",
       "124317  6598279         2846    11348.0        100:30         2   \n",
       "124318   287650         2123     1453.0          20:1        -1   \n",
       "124319   490662         5176     3923.0          20:5         7   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "124315     20160521.0        null      0  0.866667              1  ...   \n",
       "124316     20160504.0        null      0  0.900000              1  ...   \n",
       "124317     20160522.0        null      0  0.700000              1  ...   \n",
       "124318     20160509.0        null      0  0.950000              1  ...   \n",
       "124319     20160418.0        null      0  0.750000              1  ...   \n",
       "\n",
       "        weekday5  weekday6  weekday7  rec_coupon  Coupon_popu  Merchant_popu  \\\n",
       "0              0         0         1           1     0.000088       0.000088   \n",
       "1              0         0         0           2     0.000088       0.000088   \n",
       "2              0         0         1           2     0.000088       0.000088   \n",
       "3              0         0         0           3     0.000088       0.000088   \n",
       "4              0         1         0           3     0.000088       0.000088   \n",
       "...          ...       ...       ...         ...          ...            ...   \n",
       "124315         0         1         0           1     0.000008       0.000008   \n",
       "124316         0         0         0           1     0.000008       0.000008   \n",
       "124317         0         0         1           1     0.000008       0.000008   \n",
       "124318         0         0         0           1     0.000008       0.000008   \n",
       "124319         0         0         0           1     0.000008       0.000008   \n",
       "\n",
       "        merchant_min_distance  merchant_max_distance  merchant_mean_distance  \\\n",
       "0                         0.0                    1.0                     0.2   \n",
       "1                         0.0                    1.0                     0.2   \n",
       "2                         0.0                    1.0                     0.2   \n",
       "3                         0.0                    1.0                     0.2   \n",
       "4                         0.0                    1.0                     0.2   \n",
       "...                       ...                    ...                     ...   \n",
       "124315                    0.0                    0.0                     0.0   \n",
       "124316                    0.0                    0.0                     0.0   \n",
       "124317                    2.0                    2.0                     2.0   \n",
       "124318                    NaN                    NaN                     NaN   \n",
       "124319                    7.0                    7.0                     7.0   \n",
       "\n",
       "        merchant_median_distance  \n",
       "0                            0.0  \n",
       "1                            0.0  \n",
       "2                            0.0  \n",
       "3                            0.0  \n",
       "4                            0.0  \n",
       "...                          ...  \n",
       "124315                       0.0  \n",
       "124316                       0.0  \n",
       "124317                       2.0  \n",
       "124318                       NaN  \n",
       "124319                       7.0  \n",
       "\n",
       "[124320 rows x 28 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday5</th>\n",
       "      <th>weekday6</th>\n",
       "      <th>weekday7</th>\n",
       "      <th>rec_coupon</th>\n",
       "      <th>Coupon_popu</th>\n",
       "      <th>Merchant_popu</th>\n",
       "      <th>merchant_min_distance</th>\n",
       "      <th>merchant_max_distance</th>\n",
       "      <th>merchant_mean_distance</th>\n",
       "      <th>merchant_median_distance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124315</th>\n",
       "      <td>5389427</td>\n",
       "      <td>1184</td>\n",
       "      <td>1857.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124316</th>\n",
       "      <td>6896</td>\n",
       "      <td>2511</td>\n",
       "      <td>869.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160504.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124317</th>\n",
       "      <td>6598279</td>\n",
       "      <td>2846</td>\n",
       "      <td>11348.0</td>\n",
       "      <td>100:30</td>\n",
       "      <td>2</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124318</th>\n",
       "      <td>287650</td>\n",
       "      <td>2123</td>\n",
       "      <td>1453.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160509.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124319</th>\n",
       "      <td>490662</td>\n",
       "      <td>5176</td>\n",
       "      <td>3923.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>7</td>\n",
       "      <td>20160418.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>124320 rows × 28 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 154
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:34.180237Z",
     "start_time": "2024-09-20T03:51:34.173830Z"
    }
   },
   "cell_type": "code",
   "source": "new_data.dtypes",
   "id": "3aa754ac369f1fa0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "User_id                       int64\n",
       "Merchant_id                   int64\n",
       "Coupon_id                   float64\n",
       "Discount_rate                object\n",
       "Distance                      int32\n",
       "Date_received               float64\n",
       "Date                         object\n",
       "label                         int64\n",
       "Dis_rate                    float64\n",
       "Discount_type                 int64\n",
       "Discount_man                  int64\n",
       "Discount_jian                 int64\n",
       "Weekday                       int64\n",
       "Is_weekend                    int64\n",
       "weekday1                      int32\n",
       "weekday2                      int32\n",
       "weekday3                      int32\n",
       "weekday4                      int32\n",
       "weekday5                      int32\n",
       "weekday6                      int32\n",
       "weekday7                      int32\n",
       "rec_coupon                    int64\n",
       "Coupon_popu                 float64\n",
       "Merchant_popu               float64\n",
       "merchant_min_distance       float64\n",
       "merchant_max_distance       float64\n",
       "merchant_mean_distance      float64\n",
       "merchant_median_distance    float64\n",
       "dtype: object"
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 155
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "11d366cdebbb18df"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:37.688750Z",
     "start_time": "2024-09-20T03:51:37.426379Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "# 距离柱状图\n",
    "x = np.arange(-1,11)\n",
    "dis1 = np.array(new_data['Distance'].value_counts().sort_index())\n",
    "dis2 = np.array(new_test_data['Distance'].value_counts().sort_index())\n",
    "plt.bar(x,dis1,tick_label=x, label='off_train_data', width=0.3)\n",
    "plt.bar(x+0.3,dis2,label='off_test_data',width=0.3)\n",
    "plt.xlabel('距离')\n",
    "plt.ylabel('计数')\n",
    "plt.title('距离计数分布情况')\n",
    "plt.legend()\n",
    "plt.show()"
   ],
   "id": "44389d82736e5e28",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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pk2bpmnTpql///56+umndfPNN8tisZSbHwUYGUUIMLCwsDCXgpGXl6cTJ04oOjpa0sW9HJdewK+oqMjlTKOnnnqq3AUDS0tL5XA4KpxfJF28PtHP95a4q6CgoNxept69ezv/vmHDBplMJr300ks6c+aMdu7cWWE5KztVPjw8XNLFzyEiIsJlj09BQYHOnz+v5s2bu7z28OHDGj16tEJDQ7V48WLNnDlT9evXV7NmzSRJkZGRMpvNzsfST2fkVScgoOpLvVV01t+8efNkMpk0cOBASRcvd3D69Gnn2WUAXFGEADhNmTLFuadgzpw5zr0al/rNb37j/HtgYKB++9vfatKkSZIunsE1bdo0rVu3To0aNZLD4dAHH3ygW265RdLFQ2DVXdjwL3/5i+69995ye4YqctVVV+nLL7/U4cOHdc8992jt2rVq2rSpXn/9dX3xxRfOvShdu3bVwoUL9cUXX2jMmDHVrnfDhg3OCcllfvjhB0kqV4SuueYaPf300/rf//1fRUVFVbvu2ig7VDZkyJByc5YqOqyVm5urt99+W9OmTXPOHdqzZ49KSkrUsWPHOs0GXCkoQgAqVd0hlEv3WOzbt0+TJ0/WM88847woYl5eniZNmiS73a7hw4dXu7309HStWLFCCQkJNSpCJpNJDRs21JQpU9S4cWNt27ZN0dHRWrp0qaZPn+5c7ne/+50effRRdezYscrr+kjS1q1btWXLFs2fP9/l+WPHjkmSy56dMpe+t5/PoapIbScpf/TRRxUeGruUw+HQlClTFB0drREjRjifX7Jkibp3764mTZqUW2/Z5RMq2rMEGAVf/QAkXfxBumXLFm3btq3cPJqaGDdunEpLS/Xf//5XTz31lI4dO6ajR4+qpKRE6enpzkM1FSkqKtKhQ4e0evVqvfXWW4qJianVtidNmqQtW7boiy++0KRJk2QymfTvf/9bnTt3VtOmTZ2To8PCwnT+/HmFhYVVuJ4dO3boj3/8owYMGFDuStTfffedIiIiKrw44aWqmoC8Zs0affXVVzp58mS5K2hXZfDgweWe+/nZe2+//bb+/e9/691333XuPVq9erU++ugjLVq0qML1/ve//9Xvfvc7/e1vf3MeHgSMhiIEGFReXp4yMzP13//+Vz179lRAQID27t2r6OhotWzZUna7XUePHi13w1KHw+E81HLp3g+LxaLs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LEvbt2/X4MGDq82yYcMGLV68WK+++qrS09O1du1a51h2drbS09M1Y8YMrVu3TqdPn9bSpUur3V52drbS0tL0wgsvlHudL3BoDACAanz22WeqX7++Hn30UUnSs88+q169eumbb75Rt27dFBISoqCgIEVERDhfExQUpKCgoArHqhIaGqrQ0FAFBgYqNDRUV111lfPO6p999pmCgoL0yCOPyGQyacyYMXr66aclSWazWYGBgbLZbGrcuLFee+01520wwsPDnesPDw+vcZZPP/1Ut9xyi+Lj4yVJt912m3Oyd5s2bbR+/XpFREQoKytLDodD3333XbXba9OmjTZt2qSgoCDt3bvX5XW+QBECAKAaR48edZnwGxwcrKZNm+ro0aPq1q2b13IcO3ZMp0+fdhaT0tJSFRYWqri4WKGhoXrllVc0f/58TZs2zblHqXXr1m5v7/jx4+rVq5fz8bXXXussQkVFRUpLS9POnTvVqVMnmc1mlZaWVrvOoqIiPfvss9q+fXutXucpFCEAAKrRokUL5eXlOR8XFxfr+PHjatGihce2aTKZyt3YtFmzZurSpYtmz54t6eKNT61WqwIDA3XmzBlFRERo+fLlOnfunKZMmaIXXnhB8+fPr3KdVWncuLGOHz/ufHz06FHn399++22dOXNGmzZtUkhIiGbNmqXTp09X+x7efvttnT59Wps3b1ZwcHCFr/Mm5ggBAPxDkw5S81jP/2nSodbREhISVFhYqLlz5+rw4cOaPn262rRpo5iYGA98EBe1bt1aW7du1YkTJ7RlyxbZ7XYlJCToyJEj2rt3r8xmsz788EM99NBDcjgcOnPmjMaMGaONGzfKarUqICCg3J6W1q1b6/PPP9exY8ecc3iqMmjQIK1du1Y7d+7Unj17tGLFCufYuXPnnNtdu3atli1bVq70VLS9c+fOSVKVr/Mm9ggBAHyv1F7n1/apdnsB5hovXr9+fS1cuFBTpkzRokWLFBcXp3nz5ikgwHP7E8aPH6/k5GTdcsstat68uTIzMxUREaF58+YpLS1NEydOVLt27fTaa68pMDBQbdu21YQJEzR16lSdPHlSHTt21PTp013WOXXqVE2ePFmzZs3SjTfe6DzEVpnBgwcrOztb48ePV4MGDTRo0CAdPHhQknTfffdpx44d+s1vfqNu3brptttu07Zt26rd3n333aedO3dqyJAhlb7Om0wOX9awy4Ddbtfu3bvVrVs3mc01/5/mctleVW76yxf6+sjZapfr3CJCmY/180KiyvnT5/ZzZHOPv2bz11zS5ZGtY8eO+v7773Xdddc5JwD7msPh0Llz51SvXj2ZTCZfx3FBtqoVFRXpwIEDFX491fT/B/YIAQDgZT169Kjw+TZt2tToFPu6smPHDiUlJVU4NmrUKOdp+1cyihAAAF6WkZFR4fNBQUFezRETE1Nplvr163s1i69QhAAA8DJ/ufdWSEiI32TxFc4aAwB4HdNTURfq4uuIIgQA8JqyQz9lp1ADv0TZ19EvOaTIoTEAgNeYzWY1aNDAeZE+fzgbyuFwqLi4WAEBAT7P8nNkq3zb586d0/Hjx9WgQYNfdJYkRQgA4FXNmjWTJJcrFvuSw+HQhQsXFBQU5Jdlg2yVa9CggfPryV0UIQCAV5lMJjVv3lxNmzbVhQsXfB1Hdrtd+/btU7t27fzy+ktkq1hQUFCdbJciBADwCbPZ7Bc/3O12u6SLd333hzyXIpvnMVkaAAAYFkUIAAAYFkUIAAAYFkUIAAAYFkUIAAAYFkUIAAAYFkUIAAAYFkUIAAAYFkUIAAAYlk+KUFpamiwWi/PPjTfeKEnKycnRqFGjFB8fr/T0dDkcDudrPDEGAACMzSdF6Ouvv9aCBQu0fft2bd++XWvWrJHNZlNSUpI6d+6sVatWKTc3V6tXr5Ykj4wBAAB4vQiVlJQoJydHPXr0UEREhCIiIhQeHq6NGzfKarUqNTVVrVq1UnJyslauXClJHhkDAADw+k1Xs7Oz5XA4NHz4cB07dkzx8fFKS0vTvn37FBsbq7CwMEmSxWJRbm6uJHlkrLbKbi7naWXb8db2KuPODfR8mdlfPreKkM09/prNX3NJZHMX2dzjz9mkmufyehHKzc1V+/bt9eyzz6phw4aaPn26Jk+erHbt2qlly5bO5UwmkwICApSfny+r1VrnY5GRkbXKnZWV9Qvede15e3uXCgsLU3R0dK1fl52drfPnz3sgUc358nOrDtnc46/Z/DWXRDZ3kc09/pytJrxehIYNG6Zhw4Y5H//pT39SYmKi2rZtq+DgYJdlQ0JCVFRUJLPZXOdjtS1CMTExbu0lqS273a6srCyvba8uWSwWn23bnz83srnHX7P5ay6JbO4im3v8OZv0U77qeL0I/VxERIRKS0vVpEkT7d+/32WssLBQQUFBioyMrPOx2jKbzV79h/b29uqCP+T158+NbO7x12z+mksim7vI5h5/zlYTXp8s/cILL+jDDz90Ps7KylJAQIAsFov27NnjfD4vL082m02RkZGKiYmp8zEAAACvF6FOnTppzpw52r59u7Zu3aq0tDSNGDFCffr0UUFBgTIyMiRJCxYsUO/evWU2mxUfH1/nYwAAAF4/NDZ8+HDl5uZq/Pjxql+/vhITE5WcnKzAwEClpaUpJSVFs2bNkt1u15IlSy6G9MAYAACAT+YIpaSkKCUlpdzziYmJWr9+vbKyshQXF6dGjRp5dAwAABibzydL/1xUVJSioqK8NgYAAIyLm64CAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDoggBAADDogjhF7s6PEQqtdfuRbVdHgAADwj0dQBc/iLCAqUAs7TqIelkTvUvaNJBGvWG54MBAFANihDqzskc6egeX6cAAKDGODQGAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMiyIEAAAMy+dF6MEHH9Tq1aslSTk5ORo1apTi4+OVnp4uh8PhXM4TYwAAwNh8WoTef/99bdq0SZJks9mUlJSkzp07a9WqVcrNzXUWJE+MAQAA+KwI/fjjj0pPT9d1110nSdq4caOsVqtSU1PVqlUrJScna+XKlR4bAwAACPTVhtPT05WYmKji4mJJ0r59+xQbG6uwsDBJksViUW5ursfGastut7v5Tt3bjre2Vxmz2ezxbdTle/SXz60iZHOPv2bz11wS2dxFNvf4czap5rl8UoS+/PJLbd26VR988IGef/55SZLValXLli2dy5hMJgUEBCg/P98jY5GRkbXKnJWV5e7bdYu3t3epsLAwRUdHe3w72dnZOn/+fJ2u05efW3XI5h5/zeavuSSy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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 156
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:40.748161Z",
     "start_time": "2024-09-20T03:51:40.605844Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义变换距离类型的函数\n",
    "def get_distance_type(row):\n",
    "    # 距离未知\n",
    "    if row == -1:\n",
    "        return -1\n",
    "    # 1千米内\n",
    "    elif row >= 0 and row <= 2:\n",
    "        return 0\n",
    "    # 1.5-2.5千米内\n",
    "    elif row >= 3 and row <= 5:\n",
    "        return 1\n",
    "    # 3-4.5千米内\n",
    "    elif row >= 6 and row <= 9:\n",
    "        return 2\n",
    "    # 5千米\n",
    "    elif row == 10:\n",
    "        return 3\n",
    "# 构建距离类型的特征属性\n",
    "new_data['Distance_type'] = new_data['Distance'].apply(get_distance_type)\n",
    "new_test_data['Distance_type'] = new_test_data['Distance'].apply(get_distance_type)\n",
    "# 新距离类型分布情况\n",
    "new_data['Distance_type'].value_counts()\n",
    "new_test_data['Distance_type'].value_counts()\n",
    "new_data\n",
    "# '''\n",
    "#  0    84309\n",
    "# -1    13858\n",
    "#  3    13321\n",
    "#  1    11194\n",
    "#  2     6108\n",
    "# Name: Distance_type, dtype: int64\n",
    "# '''\n"
   ],
   "id": "8f1065dc25ee393",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "124315  5389427         1184     1857.0        150:20         0   \n",
       "124316     6896         2511      869.0          50:5         0   \n",
       "124317  6598279         2846    11348.0        100:30         2   \n",
       "124318   287650         2123     1453.0          20:1        -1   \n",
       "124319   490662         5176     3923.0          20:5         7   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "124315     20160521.0        null      0  0.866667              1  ...   \n",
       "124316     20160504.0        null      0  0.900000              1  ...   \n",
       "124317     20160522.0        null      0  0.700000              1  ...   \n",
       "124318     20160509.0        null      0  0.950000              1  ...   \n",
       "124319     20160418.0        null      0  0.750000              1  ...   \n",
       "\n",
       "        weekday6  weekday7  rec_coupon  Coupon_popu  Merchant_popu  \\\n",
       "0              0         1           1     0.000088       0.000088   \n",
       "1              0         0           2     0.000088       0.000088   \n",
       "2              0         1           2     0.000088       0.000088   \n",
       "3              0         0           3     0.000088       0.000088   \n",
       "4              1         0           3     0.000088       0.000088   \n",
       "...          ...       ...         ...          ...            ...   \n",
       "124315         1         0           1     0.000008       0.000008   \n",
       "124316         0         0           1     0.000008       0.000008   \n",
       "124317         0         1           1     0.000008       0.000008   \n",
       "124318         0         0           1     0.000008       0.000008   \n",
       "124319         0         0           1     0.000008       0.000008   \n",
       "\n",
       "        merchant_min_distance  merchant_max_distance  merchant_mean_distance  \\\n",
       "0                         0.0                    1.0                     0.2   \n",
       "1                         0.0                    1.0                     0.2   \n",
       "2                         0.0                    1.0                     0.2   \n",
       "3                         0.0                    1.0                     0.2   \n",
       "4                         0.0                    1.0                     0.2   \n",
       "...                       ...                    ...                     ...   \n",
       "124315                    0.0                    0.0                     0.0   \n",
       "124316                    0.0                    0.0                     0.0   \n",
       "124317                    2.0                    2.0                     2.0   \n",
       "124318                    NaN                    NaN                     NaN   \n",
       "124319                    7.0                    7.0                     7.0   \n",
       "\n",
       "        merchant_median_distance  Distance_type  \n",
       "0                            0.0              0  \n",
       "1                            0.0              0  \n",
       "2                            0.0              0  \n",
       "3                            0.0              0  \n",
       "4                            0.0              0  \n",
       "...                          ...            ...  \n",
       "124315                       0.0              0  \n",
       "124316                       0.0              0  \n",
       "124317                       2.0              0  \n",
       "124318                       NaN             -1  \n",
       "124319                       7.0              2  \n",
       "\n",
       "[124320 rows x 29 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday6</th>\n",
       "      <th>weekday7</th>\n",
       "      <th>rec_coupon</th>\n",
       "      <th>Coupon_popu</th>\n",
       "      <th>Merchant_popu</th>\n",
       "      <th>merchant_min_distance</th>\n",
       "      <th>merchant_max_distance</th>\n",
       "      <th>merchant_mean_distance</th>\n",
       "      <th>merchant_median_distance</th>\n",
       "      <th>Distance_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.000088</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124315</th>\n",
       "      <td>5389427</td>\n",
       "      <td>1184</td>\n",
       "      <td>1857.0</td>\n",
       "      <td>150:20</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124316</th>\n",
       "      <td>6896</td>\n",
       "      <td>2511</td>\n",
       "      <td>869.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>0</td>\n",
       "      <td>20160504.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124317</th>\n",
       "      <td>6598279</td>\n",
       "      <td>2846</td>\n",
       "      <td>11348.0</td>\n",
       "      <td>100:30</td>\n",
       "      <td>2</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124318</th>\n",
       "      <td>287650</td>\n",
       "      <td>2123</td>\n",
       "      <td>1453.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160509.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124319</th>\n",
       "      <td>490662</td>\n",
       "      <td>5176</td>\n",
       "      <td>3923.0</td>\n",
       "      <td>20:5</td>\n",
       "      <td>7</td>\n",
       "      <td>20160418.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>124320 rows × 29 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 157
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:43.755407Z",
     "start_time": "2024-09-20T03:51:43.531535Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 距离柱状图\n",
    "x1 = np.arange(-1,4)\n",
    "dis_type1 = np.array(new_data['Distance_type'].value_counts().sort_index())\n",
    "dis_type2 = np.array(new_test_data['Distance_type'].value_counts().sort_index())\n",
    "plt.bar(x1,dis_type1,tick_label=x1, label='off_train_data', width=0.3)\n",
    "plt.bar(x1+0.3,dis_type2,label='off_test_data',width=0.3)\n",
    "plt.xlabel('距离类型')\n",
    "plt.ylabel('计数')\n",
    "plt.title('距离类型计数分布情况')\n",
    "plt.legend()\n",
    "plt.show()"
   ],
   "id": "b045ffc8192b50fb",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 158
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T03:51:47.124754Z",
     "start_time": "2024-09-20T03:51:47.012096Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 跟距离相关的独热编码\n",
    "def Get_dis_hot(df):\n",
    "    discols = ['Distance' + str(i) for i in range(-1,11)]\n",
    "    tmpdf = pd.get_dummies(df['Distance'].replace('null', np.nan))\n",
    "    tmpdf = tmpdf.astype(int)\n",
    "    tmpdf.columns = discols\n",
    "    df[discols] = tmpdf\n",
    "    return df\n",
    "new_data = Get_dis_hot(new_data)\n",
    "new_test_data = Get_dis_hot(new_test_data)\n",
    "# 集成新的数据集后，对缺失值处理\n",
    "new_data = new_data.fillna(-1)\n",
    "new_test_data = new_test_data.fillna(-1)\n",
    "new_data.isnull().sum()\n",
    "new_test_data.isnull().sum()\n",
    "# 再次保存最终文件，方便下次直接读取进行预测操作\n",
    "# '''\n",
    "# new_data.to_csv('./final_new_data.csv')\n",
    "# new_test_data.to_csv('./final_new_test_data.csv')\n",
    "# # 读取最终保存的文件\n",
    "# new_data = pd.read_csv('./final_new_data.csv',index_col=0)\n",
    "# new_test_data = pd.read_csv('./final_new_test_data.csv',index_col=0)\n",
    "# '''"
   ],
   "id": "2420b89be6cdf90e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "User_id                     0\n",
       "Merchant_id                 0\n",
       "Coupon_id                   0\n",
       "Discount_rate               0\n",
       "Distance                    0\n",
       "Date_received               0\n",
       "Dis_rate                    0\n",
       "Discount_type               0\n",
       "Discount_man                0\n",
       "Discount_jian               0\n",
       "Weekday                     0\n",
       "Is_weekend                  0\n",
       "weekday1                    0\n",
       "weekday2                    0\n",
       "weekday3                    0\n",
       "weekday4                    0\n",
       "weekday5                    0\n",
       "weekday6                    0\n",
       "weekday7                    0\n",
       "rec_coupon                  0\n",
       "Coupon_popu                 0\n",
       "Merchant_popu               0\n",
       "merchant_min_distance       0\n",
       "merchant_max_distance       0\n",
       "merchant_mean_distance      0\n",
       "merchant_median_distance    0\n",
       "Distance_type               0\n",
       "Distance-1                  0\n",
       "Distance0                   0\n",
       "Distance1                   0\n",
       "Distance2                   0\n",
       "Distance3                   0\n",
       "Distance4                   0\n",
       "Distance5                   0\n",
       "Distance6                   0\n",
       "Distance7                   0\n",
       "Distance8                   0\n",
       "Distance9                   0\n",
       "Distance10                  0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 159
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T02:53:53.910059Z",
     "start_time": "2024-09-20T02:53:53.738524Z"
    }
   },
   "cell_type": "code",
   "source": "new_data",
   "id": "e0b0005ad2213c4e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        User_id  Merchant_id  Coupon_id Discount_rate  Distance  \\\n",
       "0       1113008         1361    11166.0          20:1         0   \n",
       "1       1449506         1361    11166.0          20:1         1   \n",
       "2       1449506         1361    11166.0          20:1         1   \n",
       "3       4781321         1361    11166.0          20:1         0   \n",
       "4       4781321         1361    11166.0          20:1         0   \n",
       "...         ...          ...        ...           ...       ...   \n",
       "526982  1259447         1002     2401.0          30:1         0   \n",
       "526983  2876619         4633     7016.0          10:1         0   \n",
       "526984  2217887          783    11321.0           0.9         7   \n",
       "526985  4382496         5425    10385.0          0.95         7   \n",
       "526986  6986183          454    12946.0          50:5        -1   \n",
       "\n",
       "        Date_received        Date  label  Dis_rate  Discount_type  ...  \\\n",
       "0          20160515.0  20160521.0      1  0.950000              1  ...   \n",
       "1          20160516.0  20160522.0      1  0.950000              1  ...   \n",
       "2          20160522.0  20160602.0      1  0.950000              1  ...   \n",
       "3          20160516.0  20160521.0      1  0.950000              1  ...   \n",
       "4          20160521.0  20160524.0      1  0.950000              1  ...   \n",
       "...               ...         ...    ...       ...            ...  ...   \n",
       "526982     20160107.0        null      0  0.966667              1  ...   \n",
       "526983     20160420.0        null      0  0.900000              1  ...   \n",
       "526984     20160125.0        null      0  0.900000              0  ...   \n",
       "526985     20160609.0        null      0  0.950000              0  ...   \n",
       "526986     20160605.0        null      0  0.900000              1  ...   \n",
       "\n",
       "        Distance1  Distance2  Distance3  Distance4  Distance5  Distance6  \\\n",
       "0               0          0          0          0          0          0   \n",
       "1               1          0          0          0          0          0   \n",
       "2               1          0          0          0          0          0   \n",
       "3               0          0          0          0          0          0   \n",
       "4               0          0          0          0          0          0   \n",
       "...           ...        ...        ...        ...        ...        ...   \n",
       "526982          0          0          0          0          0          0   \n",
       "526983          0          0          0          0          0          0   \n",
       "526984          0          0          0          0          0          0   \n",
       "526985          0          0          0          0          0          0   \n",
       "526986          0          0          0          0          0          0   \n",
       "\n",
       "        Distance7  Distance8  Distance9  Distance10  \n",
       "0               0          0          0           0  \n",
       "1               0          0          0           0  \n",
       "2               0          0          0           0  \n",
       "3               0          0          0           0  \n",
       "4               0          0          0           0  \n",
       "...           ...        ...        ...         ...  \n",
       "526982          0          0          0           0  \n",
       "526983          0          0          0           0  \n",
       "526984          1          0          0           0  \n",
       "526985          1          0          0           0  \n",
       "526986          0          0          0           0  \n",
       "\n",
       "[526987 rows x 41 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User_id</th>\n",
       "      <th>Merchant_id</th>\n",
       "      <th>Coupon_id</th>\n",
       "      <th>Discount_rate</th>\n",
       "      <th>Distance</th>\n",
       "      <th>Date_received</th>\n",
       "      <th>Date</th>\n",
       "      <th>label</th>\n",
       "      <th>Dis_rate</th>\n",
       "      <th>Discount_type</th>\n",
       "      <th>...</th>\n",
       "      <th>Distance1</th>\n",
       "      <th>Distance2</th>\n",
       "      <th>Distance3</th>\n",
       "      <th>Distance4</th>\n",
       "      <th>Distance5</th>\n",
       "      <th>Distance6</th>\n",
       "      <th>Distance7</th>\n",
       "      <th>Distance8</th>\n",
       "      <th>Distance9</th>\n",
       "      <th>Distance10</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1113008</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160515.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1449506</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>1</td>\n",
       "      <td>20160522.0</td>\n",
       "      <td>20160602.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160516.0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4781321</td>\n",
       "      <td>1361</td>\n",
       "      <td>11166.0</td>\n",
       "      <td>20:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160521.0</td>\n",
       "      <td>20160524.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>526982</th>\n",
       "      <td>1259447</td>\n",
       "      <td>1002</td>\n",
       "      <td>2401.0</td>\n",
       "      <td>30:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160107.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>526983</th>\n",
       "      <td>2876619</td>\n",
       "      <td>4633</td>\n",
       "      <td>7016.0</td>\n",
       "      <td>10:1</td>\n",
       "      <td>0</td>\n",
       "      <td>20160420.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>526984</th>\n",
       "      <td>2217887</td>\n",
       "      <td>783</td>\n",
       "      <td>11321.0</td>\n",
       "      <td>0.9</td>\n",
       "      <td>7</td>\n",
       "      <td>20160125.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>526985</th>\n",
       "      <td>4382496</td>\n",
       "      <td>5425</td>\n",
       "      <td>10385.0</td>\n",
       "      <td>0.95</td>\n",
       "      <td>7</td>\n",
       "      <td>20160609.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.950000</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>526986</th>\n",
       "      <td>6986183</td>\n",
       "      <td>454</td>\n",
       "      <td>12946.0</td>\n",
       "      <td>50:5</td>\n",
       "      <td>-1</td>\n",
       "      <td>20160605.0</td>\n",
       "      <td>null</td>\n",
       "      <td>0</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>526987 rows × 41 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 132
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "",
   "id": "3c9576335a8a29fe"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T13:01:33.755810Z",
     "start_time": "2024-09-20T13:01:33.031720Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "# 决策树分类\n",
    "# 选取要预测的特征\n",
    "features = ['Dis_rate','Discount_type','Discount_man', 'Discount_jian',\n",
    "            'Distance','Distance_type','rec_coupon','Coupon_popu','Merchant_popu','merchant_min_distance',\n",
    "            'merchant_max_distance','merchant_mean_distance','merchant_median_distance',\n",
    "            'Is_weekend','Weekday']\n",
    "# 提取指定特征属性的数据集，并且划分为训练集和验证集\n",
    "X = new_data[features]\n",
    "y = new_data['label']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,stratify=y)\n",
    "# 创建逻辑回归模型\n",
    "clf = DecisionTreeClassifier(random_state=0)\n",
    "\n",
    "# 训练模型\n",
    "clf.fit(X_train, y_train)\n",
    "\n",
    "# # 进行预测\n",
    "# y_pred = log_reg.predict(X_test)\n",
    "# \n",
    "# y_pred\n",
    "\n",
    "# 进行预测，得到预测概率\n",
    "y_pred_prob = clf.predict_proba(X_test)[:, 1]\n",
    "\n",
    "# 计算AUC\n",
    "auc_score = roc_auc_score(y_test, y_pred_prob)\n",
    "print(f'AUC: {auc_score:.2f}')"
   ],
   "id": "3ef04c810d561c2a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.79\n"
     ]
    }
   ],
   "execution_count": 171
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T13:01:10.189134Z",
     "start_time": "2024-09-20T13:01:08.893935Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "# 逻辑分类\n",
    "# 选取要预测的特征\n",
    "features = ['Dis_rate','Discount_type','Discount_man', 'Discount_jian',\n",
    "            'Distance','Distance_type','rec_coupon','Coupon_popu','Merchant_popu','merchant_min_distance',\n",
    "            'merchant_max_distance','merchant_mean_distance','merchant_median_distance',\n",
    "            'Is_weekend','Weekday']\n",
    "# 提取指定特征属性的数据集，并且划分为训练集和验证集\n",
    "X = new_data[features]\n",
    "y = new_data['label']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,stratify=y)\n",
    "# 创建逻辑回归模型\n",
    "log_reg = LogisticRegression()\n",
    "\n",
    "# 训练模型\n",
    "log_reg.fit(X_train, y_train)\n",
    "\n",
    "# # 进行预测\n",
    "# y_pred = log_reg.predict(X_test)\n",
    "# \n",
    "# y_pred\n",
    "\n",
    "# 进行预测，得到预测概率\n",
    "y_pred_prob = log_reg.predict_proba(X_test)[:, 1]\n",
    "\n",
    "# 计算AUC\n",
    "auc_score = roc_auc_score(y_test, y_pred_prob)\n",
    "print(f'AUC: {auc_score:.2f}')"
   ],
   "id": "ec4204ec52b90ffa",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.83\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    }
   ],
   "execution_count": 170
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T13:35:37.764789Z",
     "start_time": "2024-09-20T13:33:52.860485Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ------------------------------------  第五部分 挖掘建模  --------------------------------------#\n",
    "# 查看属性特征\n",
    "new_data.columns\n",
    "new_test_data.columns\n",
    "# 选取要预测的特征\n",
    "# features = ['Dis_rate','Discount_type','Discount_man', 'Discount_jian',\n",
    "#             'Distance','Distance_type','Distance-1', 'Distance0',\n",
    "#             'Distance1', 'Distance2', 'Distance3', 'Distance4', 'Distance5',\n",
    "#             'Distance6', 'Distance7', 'Distance8', 'Distance9', 'Distance10',\n",
    "#             'rec_coupon','Coupon_popu','Merchant_popu','merchant_min_distance',\n",
    "#             'merchant_max_distance','merchant_mean_distance','merchant_median_distance',\n",
    "#             'Is_weekend']\n",
    "features = ['Dis_rate','Discount_type','Discount_man', 'Discount_jian',\n",
    "            'Distance','Distance_type',\n",
    "            'rec_coupon','Coupon_popu','Merchant_popu','merchant_min_distance',\n",
    "            'merchant_max_distance','merchant_mean_distance','merchant_median_distance',\n",
    "            'Is_weekend']\n",
    "\n",
    "\n",
    "\n",
    "# 提取指定特征属性的数据集，并且划分为训练集和验证集\n",
    "X = new_data[features]\n",
    "y = new_data['label']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,stratify=y)\n",
    "# 进行网格搜索调参\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "# param_second_grid = {\n",
    "#     'learning_rate':[0.1,0.11,0.12,0.13],\n",
    "#     'max_depth': [4,6],\n",
    "#     'n_estimators': [160]\n",
    "# }\n",
    "# grid_second_search = GridSearchCV(estimator = GradientBoostingClassifier(),\n",
    "#                      param_grid = param_second_grid, scoring = 'neg_mean_absolute_error', cv = 3)\n",
    "# grid_second_search.fit(X_train , y_train)\n",
    "# grid_second_search.best_params_\n",
    "# '''\n",
    "# {'learning_rate': 0.13, 'max_depth': 4, 'n_estimators': 160}\n",
    "# '''\n",
    "# 集成学习提升决策树分类模型\n",
    "# n 160 d 4 a 0.8890163692846558 s 0.6836\n",
    "# n 160 d 4 l 0.12 a 0.8902440244868226 s 0.6825\n",
    "#   n_estimators 要执行的推进阶段的数量。梯度增强对过拟合具有较强的鲁棒性，因此大量的梯度增强通常能取得较好的效果。\n",
    "#  max_depth 单个回归估计量的最大深度。最大深度限制了树中的节点数。优化此参数以获得最佳性能;最佳值取决于输入变量的相互作用。\n",
    "GBC_model = GradientBoostingClassifier(learning_rate=0.05,n_estimators=150,max_depth=14)\n",
    "# GBC_model.fit(X,y)\n",
    "GBC_model.fit(X_train,y_train)\n",
    "# 预测样本的各类标签（这里是0和1）的概率\n",
    "# predict(X)\t预测X的类。\n",
    "# predict_proba(X)\t预测X的类概率。\n",
    "\n",
    "GBC_model.predict_proba(X_test)\n",
    "# 预测标签为1的概率\n",
    "y_predict = GBC_model.predict_proba(X_test)[:,1]\n",
    "# AUC值，验证集上的性能结果\n",
    "y_auc = roc_auc_score(y_test,y_predict)\n",
    "y_auc\n",
    "\n",
    "#  subsample=0.6  0.8891626586931664\n",
    "#  subsample=0.5  0.8873431692819697"
   ],
   "id": "bafba43369358f82",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8740990879321676"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 180
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-20T06:32:11.569665Z",
     "start_time": "2024-09-20T06:32:10.116369Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 相关性分析\n",
    "corr = new_data[features].corr(method = 'pearson')  # 计算相关系数矩阵\n",
    "print('相关系数矩阵为：\\n',np.round(corr, 2))  # 保留两位小数\n",
    "# 绘制相关性热力图\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.subplots(figsize=(10, 10))  # 设置画面大小\n",
    "sns.heatmap(corr, annot=True, vmax=1, square=True, cmap=\"Blues\")\n",
    "plt.title('相关性热力图')\n",
    "plt.show()\n",
    "# 距离箱型图\n",
    "# off_train_data['Distance'].isnull().sum()\n",
    "# off_test_data['Distance'].isnull().sum()\n",
    "# D1 = np.array(off_train_data['Distance'].values)\n",
    "# D2 = np.array(off_test_data['Distance'].values)\n",
    "# plt.boxplot([D1,D2],labels=('off_train_data','off_test_data'))\n",
    "# plt.title('距离箱型图')\n",
    "# plt.show()"
   ],
   "id": "e86487d21bc6bfe7",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "相关系数矩阵为：\n",
      "                           Dis_rate  Discount_type  Discount_man  \\\n",
      "Dis_rate                      1.00          -0.16          0.22   \n",
      "Discount_type                -0.16           1.00          0.20   \n",
      "Discount_man                  0.22           0.20          1.00   \n",
      "Discount_jian                -0.16           0.21          0.83   \n",
      "Distance                      0.01           0.03          0.21   \n",
      "Distance_type                 0.00           0.04          0.18   \n",
      "Distance-1                    0.05          -0.09         -0.02   \n",
      "Distance0                    -0.04           0.04         -0.22   \n",
      "Distance1                    -0.01           0.01          0.03   \n",
      "Distance2                    -0.00          -0.01          0.07   \n",
      "Distance3                     0.01          -0.00          0.06   \n",
      "Distance4                     0.01           0.00          0.05   \n",
      "Distance5                     0.01          -0.00          0.05   \n",
      "Distance6                     0.00           0.01          0.04   \n",
      "Distance7                     0.01           0.00          0.05   \n",
      "Distance8                     0.01           0.01          0.04   \n",
      "Distance9                     0.01           0.00          0.03   \n",
      "Distance10                    0.01           0.02          0.14   \n",
      "rec_coupon                    0.08          -0.06         -0.12   \n",
      "Coupon_popu                   0.02           0.14          0.29   \n",
      "Merchant_popu                -0.05           0.11          0.43   \n",
      "merchant_min_distance         0.03           0.03         -0.02   \n",
      "merchant_max_distance        -0.21           0.15          0.14   \n",
      "merchant_mean_distance        0.03           0.04          0.38   \n",
      "merchant_median_distance      0.06           0.02          0.31   \n",
      "Is_weekend                    0.03          -0.00          0.06   \n",
      "\n",
      "                          Discount_jian  Distance  Distance_type  Distance-1  \\\n",
      "Dis_rate                          -0.16      0.01           0.00        0.05   \n",
      "Discount_type                      0.21      0.03           0.04       -0.09   \n",
      "Discount_man                       0.83      0.21           0.18       -0.02   \n",
      "Discount_jian                      1.00      0.21           0.19       -0.02   \n",
      "Distance                           0.21      1.00           0.97       -0.30   \n",
      "Distance_type                      0.19      0.97           1.00       -0.45   \n",
      "Distance-1                        -0.02     -0.30          -0.45        1.00   \n",
      "Distance0                         -0.21     -0.52          -0.33       -0.32   \n",
      "Distance1                          0.02     -0.10          -0.14       -0.13   \n",
      "Distance2                          0.06      0.01          -0.09       -0.09   \n",
      "Distance3                          0.05      0.07           0.11       -0.07   \n",
      "Distance4                          0.05      0.11           0.10       -0.06   \n",
      "Distance5                          0.05      0.13           0.08       -0.05   \n",
      "Distance6                          0.05      0.16           0.19       -0.04   \n",
      "Distance7                          0.04      0.17           0.17       -0.04   \n",
      "Distance8                          0.04      0.19           0.16       -0.04   \n",
      "Distance9                          0.03      0.20           0.14       -0.03   \n",
      "Distance10                         0.15      0.82           0.82       -0.12   \n",
      "rec_coupon                        -0.13     -0.12          -0.09       -0.02   \n",
      "Coupon_popu                        0.18      0.06           0.07       -0.12   \n",
      "Merchant_popu                      0.30      0.04           0.05       -0.11   \n",
      "merchant_min_distance             -0.01      0.15           0.15       -0.09   \n",
      "merchant_max_distance              0.18      0.21           0.23       -0.25   \n",
      "merchant_mean_distance             0.40      0.52           0.48       -0.11   \n",
      "merchant_median_distance           0.35      0.48           0.44       -0.07   \n",
      "Is_weekend                         0.06      0.04           0.03        0.01   \n",
      "\n",
      "                          Distance0  Distance1  Distance2  ...  Distance9  \\\n",
      "Dis_rate                      -0.04      -0.01      -0.00  ...       0.01   \n",
      "Discount_type                  0.04       0.01      -0.01  ...       0.00   \n",
      "Discount_man                  -0.22       0.03       0.07  ...       0.03   \n",
      "Discount_jian                 -0.21       0.02       0.06  ...       0.03   \n",
      "Distance                      -0.52      -0.10       0.01  ...       0.20   \n",
      "Distance_type                 -0.33      -0.14      -0.09  ...       0.14   \n",
      "Distance-1                    -0.32      -0.13      -0.09  ...      -0.03   \n",
      "Distance0                      1.00      -0.35      -0.24  ...      -0.09   \n",
      "Distance1                     -0.35       1.00      -0.10  ...      -0.04   \n",
      "Distance2                     -0.24      -0.10       1.00  ...      -0.02   \n",
      "Distance3                     -0.19      -0.08      -0.05  ...      -0.02   \n",
      "Distance4                     -0.16      -0.06      -0.04  ...      -0.02   \n",
      "Distance5                     -0.13      -0.05      -0.04  ...      -0.01   \n",
      "Distance6                     -0.12      -0.05      -0.03  ...      -0.01   \n",
      "Distance7                     -0.10      -0.04      -0.03  ...      -0.01   \n",
      "Distance8                     -0.10      -0.04      -0.03  ...      -0.01   \n",
      "Distance9                     -0.09      -0.04      -0.02  ...       1.00   \n",
      "Distance10                    -0.32      -0.13      -0.09  ...      -0.03   \n",
      "rec_coupon                     0.16      -0.04      -0.04  ...      -0.01   \n",
      "Coupon_popu                   -0.01       0.05       0.03  ...       0.00   \n",
      "Merchant_popu                 -0.01       0.05       0.04  ...      -0.00   \n",
      "merchant_min_distance         -0.06      -0.01       0.01  ...       0.02   \n",
      "merchant_max_distance         -0.05       0.05       0.05  ...       0.03   \n",
      "merchant_mean_distance        -0.39       0.00       0.08  ...       0.09   \n",
      "merchant_median_distance      -0.34      -0.03       0.04  ...       0.09   \n",
      "Is_weekend                    -0.04      -0.01       0.01  ...       0.00   \n",
      "\n",
      "                          Distance10  rec_coupon  Coupon_popu  Merchant_popu  \\\n",
      "Dis_rate                        0.01        0.08         0.02          -0.05   \n",
      "Discount_type                   0.02       -0.06         0.14           0.11   \n",
      "Discount_man                    0.14       -0.12         0.29           0.43   \n",
      "Discount_jian                   0.15       -0.13         0.18           0.30   \n",
      "Distance                        0.82       -0.12         0.06           0.04   \n",
      "Distance_type                   0.82       -0.09         0.07           0.05   \n",
      "Distance-1                     -0.12       -0.02        -0.12          -0.11   \n",
      "Distance0                      -0.32        0.16        -0.01          -0.01   \n",
      "Distance1                      -0.13       -0.04         0.05           0.05   \n",
      "Distance2                      -0.09       -0.04         0.03           0.04   \n",
      "Distance3                      -0.07       -0.04         0.02           0.02   \n",
      "Distance4                      -0.06       -0.03         0.01           0.01   \n",
      "Distance5                      -0.05       -0.03         0.01           0.01   \n",
      "Distance6                      -0.04       -0.03         0.00          -0.00   \n",
      "Distance7                      -0.04       -0.02         0.00           0.00   \n",
      "Distance8                      -0.04       -0.02         0.00           0.00   \n",
      "Distance9                      -0.03       -0.01         0.00          -0.00   \n",
      "Distance10                      1.00       -0.08         0.04           0.02   \n",
      "rec_coupon                     -0.08        1.00        -0.08          -0.09   \n",
      "Coupon_popu                     0.04       -0.08         1.00           0.75   \n",
      "Merchant_popu                   0.02       -0.09         0.75           1.00   \n",
      "merchant_min_distance           0.10       -0.00        -0.06          -0.06   \n",
      "merchant_max_distance           0.13       -0.07         0.29           0.27   \n",
      "merchant_mean_distance          0.38       -0.16         0.04           0.04   \n",
      "merchant_median_distance        0.37       -0.11        -0.00          -0.08   \n",
      "Is_weekend                      0.03       -0.02         0.04          -0.00   \n",
      "\n",
      "                          merchant_min_distance  merchant_max_distance  \\\n",
      "Dis_rate                                   0.03                  -0.21   \n",
      "Discount_type                              0.03                   0.15   \n",
      "Discount_man                              -0.02                   0.14   \n",
      "Discount_jian                             -0.01                   0.18   \n",
      "Distance                                   0.15                   0.21   \n",
      "Distance_type                              0.15                   0.23   \n",
      "Distance-1                                -0.09                  -0.25   \n",
      "Distance0                                 -0.06                  -0.05   \n",
      "Distance1                                 -0.01                   0.05   \n",
      "Distance2                                  0.01                   0.05   \n",
      "Distance3                                  0.03                   0.04   \n",
      "Distance4                                  0.03                   0.04   \n",
      "Distance5                                  0.03                   0.03   \n",
      "Distance6                                  0.04                   0.03   \n",
      "Distance7                                  0.03                   0.03   \n",
      "Distance8                                  0.04                   0.03   \n",
      "Distance9                                  0.02                   0.03   \n",
      "Distance10                                 0.10                   0.13   \n",
      "rec_coupon                                -0.00                  -0.07   \n",
      "Coupon_popu                               -0.06                   0.29   \n",
      "Merchant_popu                             -0.06                   0.27   \n",
      "merchant_min_distance                      1.00                   0.08   \n",
      "merchant_max_distance                      0.08                   1.00   \n",
      "merchant_mean_distance                     0.31                   0.39   \n",
      "merchant_median_distance                   0.29                   0.22   \n",
      "Is_weekend                                -0.00                   0.03   \n",
      "\n",
      "                          merchant_mean_distance  merchant_median_distance  \\\n",
      "Dis_rate                                    0.03                      0.06   \n",
      "Discount_type                               0.04                      0.02   \n",
      "Discount_man                                0.38                      0.31   \n",
      "Discount_jian                               0.40                      0.35   \n",
      "Distance                                    0.52                      0.48   \n",
      "Distance_type                               0.48                      0.44   \n",
      "Distance-1                                 -0.11                     -0.07   \n",
      "Distance0                                  -0.39                     -0.34   \n",
      "Distance1                                   0.00                     -0.03   \n",
      "Distance2                                   0.08                      0.04   \n",
      "Distance3                                   0.10                      0.07   \n",
      "Distance4                                   0.10                      0.08   \n",
      "Distance5                                   0.10                      0.08   \n",
      "Distance6                                   0.11                      0.09   \n",
      "Distance7                                   0.10                      0.09   \n",
      "Distance8                                   0.09                      0.08   \n",
      "Distance9                                   0.09                      0.09   \n",
      "Distance10                                  0.38                      0.37   \n",
      "rec_coupon                                 -0.16                     -0.11   \n",
      "Coupon_popu                                 0.04                     -0.00   \n",
      "Merchant_popu                               0.04                     -0.08   \n",
      "merchant_min_distance                       0.31                      0.29   \n",
      "merchant_max_distance                       0.39                      0.22   \n",
      "merchant_mean_distance                      1.00                      0.92   \n",
      "merchant_median_distance                    0.92                      1.00   \n",
      "Is_weekend                                  0.05                      0.06   \n",
      "\n",
      "                          Is_weekend  \n",
      "Dis_rate                        0.03  \n",
      "Discount_type                  -0.00  \n",
      "Discount_man                    0.06  \n",
      "Discount_jian                   0.06  \n",
      "Distance                        0.04  \n",
      "Distance_type                   0.03  \n",
      "Distance-1                      0.01  \n",
      "Distance0                      -0.04  \n",
      "Distance1                      -0.01  \n",
      "Distance2                       0.01  \n",
      "Distance3                       0.00  \n",
      "Distance4                       0.01  \n",
      "Distance5                       0.01  \n",
      "Distance6                       0.01  \n",
      "Distance7                       0.01  \n",
      "Distance8                       0.00  \n",
      "Distance9                       0.00  \n",
      "Distance10                      0.03  \n",
      "rec_coupon                     -0.02  \n",
      "Coupon_popu                     0.04  \n",
      "Merchant_popu                  -0.00  \n",
      "merchant_min_distance          -0.00  \n",
      "merchant_max_distance           0.03  \n",
      "merchant_mean_distance          0.05  \n",
      "merchant_median_distance        0.06  \n",
      "Is_weekend                      1.00  \n",
      "\n",
      "[26 rows x 26 columns]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x1000 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6QAAAOBCAYAAADm3m1YAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gU1f7H8fduKkkIEQKE0ItZeg0q3IsCgkg1NI0iTRQB9aroD0RQwYKUC9KkXQRFBUSNQaI0lRIUSUBQadIJgSQQSSGkbJLN74/AkpBKGUP5vJ5nH8ieM985c2Z2Zs+eM2dMWVlZWYiIiIiIiIj8w8wlXQARERERERG5M6lBKiIiIiIiIiVCDVIREREREREpEWqQioiIiIiISIlQg1RERERERERKhBqkIiIiIiIiUiLUIBUREREREZESoQapiIiIiIiIlAg1SEVERERERKREqEEqIiIiIiIiJUINUhERERERkTtEXFwc7du3JzIyslj5w8LC6Ny5M/feey9Lliy54eVRg1REREREROQOcO7cOYYNG8apU6eKnX/48OF07dqVL774gtWrV/Prr7/e0DKpQSoiIiIiInIHGDlyJF26dCl2/m+//Zby5cvz3HPPUaNGDUaMGMFXX311Q8ukBqmIiIiIiMgtymq1kpSUlOtltVrzzfvOO+8wcODAYsf+66+/uO+++zCZTAA0btyYffv23ZByX+J4Q6OJiIiIiIjchko1e76ki5CvKU9ZmDNnTq73nn/+eV544YU8eatWrXpVsZOSkqhdu7b9bw8PD2JiYq6toAVQg1REREREROQW9eyzzzJ48OBc7zk7O9+Q2A4ODrliubi4kJqaekNiX6IGqYiIiIiIyC3K2dn5hjVAr1SmTBnOnTtn//vChQs4OTnd0HWoQSoiIiIiIlIU0503/U6jRo347rvv7H/v37+fihUr3tB13Hm1KiIiIiIiInZJSUmkp6fneb99+/bs3LmTX3/9lYyMDBYvXsy///3vG7puNUhFRERERETuYD169GDz5s153i9btiyjR4/m6aef5t///jeHDh1i+PDhN3TdpqysrKwbGlFEREREROQ2U6rFiyVdhHyl7Jxp+DpOnDjBkSNHuOeee/Dw8LihsXUPqYiIiIiIiBSoevXqVK9e3ZDYGrIrIiIiIiIiJUI9pCIiIiIiIkW5A2fZ/SeoVkVERERERKREqEEqIiIiIiIiJUJDdkVERERERIpiMpV0CW5L6iEVERERERGREqEGqYiIiIiIiJQIDdkVEREREREpimbZNYRqVUREREREREqEGqQiIiIiIiJSIjRkV0REREREpCiaZdcQ6iEVERERERGREqEGqYiIiIiIiJQIDdkVEREREREpimbZNYRqVUREREREREqEGqQiIiIiIiJSIjRkV0REREREpCiaZdcQ6iEVERERERGREqEGqYiIiIiIiJQIDdkVEREREREpimbZNYRqVUREREREREqEGqQiIiIiIiJSIjRkV0REREREpCiaZdcQ6iEVERERERGREqEGqYiIiIiIiJQIDdkVEREREREpimbZNYRqVUREREREREqEGqQiIiIiIiJSIjRkV0REREREpCiaZdcQ6iEVERERERGREqEGqYiIiIiIiJQIDdkVEREREREpimbZNYRqVUREREREREqEGqQiIiIiIiJSIjRkV0REREREpCgasmsI1aqIiIiIiIiUCDVIRUREREREpERoyK6IiIiIiEhRzKaSLsFtST2kIiIiIiIiUiLUIBUREREREZESoSG7IiIiIiIiRdEsu4ZQrYqIiIiIiEiJUINURERERERESoSG7IqIiIiIiBTFpFl2jaAeUhERERERESkRapCKiMgdb+/evUyePPm6YqSkpBATE5Pn/d27dxe5bFpaGmlpade1/i+//JJ33303z/sff/wxR48evep4GzZs4KmnniI6Ovq6yiUiIlIYDdkVEZE7XkREBJ9++imjR48GshuXTZs2LTD/W2+9xRNPPJHrvTfeeIOjR4+yYsUKnJ2dAfj777954oknGDJkCK+88kqB8UaPHo3NZmPWrFl50v744w+GDx/O6tWrKVu2bIExEhMTiYqKyvP+N998Q3p6OrVq1Spw2fxcuHCBn3/+GUfHor8qhIeH8+STT15VfIDVq1fj5+d31cuJiJQIzbJrCDVIRUTkjufo6Jir4eXk5ATA7NmzadasWa68ffr0safn9Pzzz9O9e3fmzJnDyJEjgewGl4uLC/379y90/U5OTthsNvvfERERPPfccyxevBiz2UxsbGy+6wRITU3FyckJBwcHHBwcyMjIwGazYbVaSU5OxmazYbPZOHToEMnJydSqVYvSpUsXWSeX1ufq6lpkXgcHBwB+/fVX3NzcADh//jwrVqwg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vkliYiJly5blyJEj1K5dG4A///wTZ2fnXI+hySkrK4s333yTU6dOMX369HzznD17FgBvb+9CyzV48GAyMzPp2LEjK1asyHdyJBERkVv/LlgREZFr4OLiwqJFi6hatWq+6TabrcBlMzMz880/btw4du/ezVtvvcUbb7yBp6cnffr0YcuWLTes3Fc6e/YszzzzDKtWrQLgP//5D8HBwVSrVo3Y2Fi6d+9OeHg4kD2b7ueff84vv/ySJ47VauX111/nm2++YfTo0TRo0CDf9e3evRsHBwcqVapkfy+/+hg7diytW7dm+fLldO7cmY8//jhPnkvDkUVE5M6lHlIREbljXZqM6FKD6tKzOLOyssjKyirwHtIrG2B79uxh/PjxREZGsnjxYvvMuUuXLuXZZ5/lmWee4d5772XgwIG0bt3afq/nJZfWB5CQkEBKSgrOzs5A9v2oAPHx8aSlpZGZmUl6ejq+vr4AzJs3j2rVqhEQEABA48aNWb58OYMGDcLb25s2bdrw0Ucf0bJlS6pVq8YTTzzBe++9x7fffmvv7f3999958803OXjwIKNHj6Z///65yvfDDz+wdu1azpw5Q1hYGK1atcr1/NNL9XHmzBn7tnl6etKrVy969epFWFgYvr6+9qG6l3pZMzIyithDIiI3kdtgRtubkRqkIiJyx0tLSwOyewkdHR3tj0Up6B7S9PR0AL7++muCg4MJDw/noYceYsGCBZQrV86e19PTk6VLl7Jo0SLmzZvH9u3bqVixIt9//z0eHh72fFar1d4ju3TpUubMmYOTk5P9ETPOzs48/PDDQHYjztXVlV27dnHy5Em++OILZsyYYW9c9ujRgxkzZtiH6j766KNMmzaNlJQUSpUqxdChQ1mzZg2HDh2ibt26nD17lldffZXk5GTmz5/PAw88kKd+atWqxffff0/VqlV59NFHee6553KlX2qQXipjceXXsyoiIncWU5bGy4iIyB0uOTmZc+fOUblyZUwmE1lZWZw6dYry5cvn6gm80vLly9m8eTPDhg2jadOmha7j7NmzfPHFF9SsWZOuXbvmSnvppZfIzMxk9uzZZGZmYjabC33e6aWeXIADBw5gsVhy5U9KSrI3eLOysvLEyrk8ZD++xsnJibJlyxZrnVcKDw/nySef5Lfffst34qUrRUdH88ADD7Bq1Srq1q1bZH4RkZtBqYfz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wZw/f565c+cC0KpVKyIjI4mMjGTIkCEcOnSIxYsXV3nM9913H8888wwBAQH06tWL8vJynnrqqSrbiYiIiIjUBpOpbi71nam8Ol1eInXEDz/8QE5ODt27d69wk6PqWPf1SYOyuqrU4H9KmWcr/yKgpozOf85b24wLbvC7ccqCEYbGb/E/jQ2Nf/rsJUPjXy4tNTT+lTJjX5tGvvaN/oQtx9gdGJ1/mcH5Gy1o1BzDYn+6eoZhsQFOXzT2fcHe1tg+jzOFxYbGv1RcVvVGNbDjUOWzI9SUrY1xn4sjungYFhvgma4tq97ISlb/I6vqjazgqS5195xVh25qJPXKfffdx3333WftNEREREREpBaoIBUREREREamCqSGMj62DdA2piIiIiIiIWIUKUhEREREREbEKDdkVERERERGpgnryjKHzKiIiIiIiIlahaV/kthG765ih8du4Ohsa38XB2AENtgZfqG/k1B0lZcbenv9ccYmh8Q/kFhga39ujiaHxjZ4yyAZjX5tG51+f1fczY/Tv9g4He8NiD31qhmGxAZLXGBvfaHmXjZ325Q5H4363AE0db27quptVdMW4z8Uzl42dhm5YZ2OnlakJo6cQvFUjvVvc1PaHDh0iIiKCzMxMAgMDCQ8Pr/KGTXv27GH69Onk5eXx3HPPMXbs2JqkXIF6SEVERERERKpgMpnq5HIziouLee6557j//vv55JNPOHLkCPHx8ZW2ycvLIzQ0lMGDB7Nu3TqSkpL46quvanIqK1BBKiIiIiIichvYsWMHBQUFREREcM899zBx4kQ2bNhQaZtPP/2Uu+66i+eff542bdoQFhZWZZuboYJURERERESkniouLqagoKDCUlx8/WHtP/zwAw8++CCNGzcGwGw2c+TIkUrj//jjjzzyyCOW3tjOnTvz/fff11r+KkhFRERERESqYKqjyzvvvEPXrl0rLO+88851j6GgoICWLVv+55hMJmxsbDh37twNj/u/27i4uJCTk1OdU1YtmvZFRERERESknnr22WevucmQg8P1b5xla2t7zTpHR0cuX77MHXfcUa02v2xfW1SQioiIiIiI1FMODg43LED/2x133MHhw4crPHfx4kXs7W98Z+k77riDvLy8am9/szRkV0REREREpArWvptubdxl94EHHuDbb7+1PM7KyqK4uPiGvaPXa3Pw4EGaNWt28yfwBlSQioiIiIiI3Aa6devGhQsXSEhIACAuLg5fX19sbW0pKCigpOTaudf9/PzYt28fX331FVeuXOG9996jR48etZaTCtJ6aNKkSURFRZGYmMiAAQP46KOPANi/fz8jRoyga9euvPDCC1y4cMHSZteuXfj7++Pt7U1ISAjZ2dnV2ldl7TIyMvjDH/5At27deOWVVzh//jwA8fHxBAcHW7bLysrCbDYDEBUVRUhICM888wxdu3bl5ZdfpqCgoNox169fj6+vL927d+fzzz+/xTMoIiIiInL7sbOzY/bs2UyfPh1fX1+2bNnCK6+8AsDQoUNJS0u7ps2dd97Ja6+9RkhICD169ODw4cOEhobWWk4qSOupnTt3smbNGiIiIujXrx/nz59n/Pjx9OrVi6SkJC5dukRkZCRwtSAMDQ1l7NixbN68GVdXV2bNmlXlPiprd/r0aSZMmMDTTz9NfHw8Fy9eZNKkSdXKPT09ncDAQD755BNOnjzJkiVLqhXz8OHDbNmyhdWrVzNs2DDL8YmIiIiIGM2mji43q1+/fqSkpDBr1iw2b97M7373OwC2b99Ov379rtvm6aefZtOmTcydO5dPP/0Ud3f3W9jz9emmRvXUiRMn2LJlC02aNAEgMTERe3t7nn/+eUwmE2PGjCE8PByA5ORkfHx8GD58OADh4eEcPHiwyn1U1u7TTz/F29ubJ598EoCZM2fy+9//np9//rnKuF26dCEgIACA8ePHM2/ePKZMmVJlzMLCQubPn4+7uzsjRoxgxYoV1T1dIiIiIiLy/2vWrNlNXwfaunVrWrduXeu5qCCtp/7whz9YilGAnJwc8vLy6NatGwBlZWVcvHiRoqIisrOzadGihWVbDw8PPDw8qtxHZe1Onz5dYT6iZs2a4eDgwOnTp6+J89+3hfb09KzQ7syZM9WK2bZtW8u3MbV5Zy8REREREbEODdmtp5ycnCo89vDwoFOnTiQkJJCQkEBiYiIJCQnY2dnh6elJVlaWZdujR48SEBBAWVlZpfuorF3z5s0rrMvJyaG4uJjmzZtjMpkoLS21rDtw4ECFuCdPnrT8fOrUKe666y6ASmPC1Ul4RURERESswdp3062Nu+zWRSpIG4jevXtz6tQp9u/fj62tLZ999hkhISGUl5czePBg9u3bR3x8PKdPnyYmJgY3NzdsbCr/9VfWbujQoXz99desX7+eEydOMH36dPr164e7uzseHh7861//4ty5c5w5c+aaobXffPMNGzdu5NixYyxfvpzHHnsMoNKYIiIiIiLS8KggbSBcXV2Jjo5m5cqVDBw4kK1btxITE4OdnR0tW7a0rBs8eDDnz59n7ty5VcasrJ2HhwfvvPMOH3/8McOGDcPJyYl58+YB8PDDD9OzZ0/8/f157rnn+Mtf/lIhbp8+fUhISOCJJ57gnnvu4fnnn68ypoiIiIiINDym8vLycmsnIbePqKgoTp48aZU75MbuOmZo/DauzobGd3Ew9pJvW4OHfFwpM+6tpqSK4ec1da742jm5atOB3IKqN6oBb48mVW9UA6UGf4zYYOxr0+j867P6fmaM/t3e4WDc/QyGPjXDsNgAyWuMjW+0vMvFhsa/w9HYe1U0dXQwNH7RFeM+F89cLjIsNsCwzlXf58RaEvZXb9rE31pAHT5n1aGbGt3GTp06xdChQ6+7ztfXl7feeus3zkhERERERG4nKkhvY3fffTcJCQnXXdeoUSND9vniiy8aEldEREREROofFaS3sV+uLxURERERkco1gBva1km6qZGIiIiIiIhYhQpSERERERERsQoN2RUREREREamC0Xd9v12ph1RERERERESsQj2kcttwdTT25f5NznlD4/+YW2ho/OZ3OBoa/143Y+7cDFBq4BynAB3dXA2N3+EuY/P/t8Hz9dkZfJcHGxuD4xsa3Vgm3WHDqk5fvGRYbKPnCR3yR2PjN7q/u6Hx10Q8Zmz8b42db7JPu6aGxm9sZ2tY7EtXSg2LLbcnFaQiIiIiIiJV0HeAxqjPXwyLiIiIiIhIPaaCVERERERERKxCQ3ZFRERERESqYNJddg2hHlIRERERERGxChWkddT58+f585//jJeXF8OGDeOf//yntVMSERERERGpVSpI66iIiAgKCwtJSEggMDCQ0NBQLl++bO20RERERERuSyZT3VzqOxWkddCJEyfYtm0bc+fOpU2bNjz99NPY29vz1VdfWTs1ERERERGRWqOCtA76xz/+QatWrbj77rstzz311FO4uLhw6NAh/vjHP9K1a1fGjx9PdvbViZt3796Nn59fhThms5msrCzi4+Mtvaxdu3Zl3Lhx5ObmWrarKua2bdvo06cP3bp1Y9WqVVXmf6v7q6xdZccnIiIiIiL1kwrSOignJwc3N7cK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ZGSwZcsWS9x169bh5OREUlISbm5uvPPOOwBs2rSJd999l7/+9a+sWbOGjIwMPv74YwASExOJi4tj8eLFREVFsWTJkmoX4yIiIiIiUjf9JkN2hwwZwn333QfAk08+ydmzZ4mJieHOO+/k+eefx2QyMWbMGMLDwyu0Kyws5KOPPsLe3t7yXHJyMj4+PgwfPhyA8PBwDh48WKHN/PnzcXd3Z8SIEaxYsQIAZ2dnvvzyS5ydnTlw4AAlJSUcO3asynZOTk4A2NjY4OTkhKura7WPOyAgAEdHR9zd3enfvz/btm3jypUrJCcn07FjRwIDAwEICgpiw4YNhIWF0aZNG3bu3Im9vT379++nvLy8Qp62trbMnj0bR0dHhg0bxrRp06rM44svvsDf359u3boBEBgYyP79+6ts5+joCEBxcTGenp787W9/s6xr0qQJLi4uANeck4cffpjU1FRKS0v55ptvsLW15ejRo5b1Hh4evPrqq8DV10ZycjIAn3zyCaNHj8bHxweAhQsXWnpWExISePLJJy1fTPTp04ft27dbthURERERMZJJI3YN8ZsUpL8UNr/+2c7Ojry8PEuRVFZWxsWLFykqKrJsExQUVKEYBcjOzqZFixaWxx4eHnh4eFget23bFnd3d4AKbcvLy1m0aBFbt26lXbt2uLi4UFZWVmW72jjuXx8/QE5ODt9//72lmCotLbUUvpcvX2bKlClkZGTQoUMHbG1tK+Tp5eVliVfdPHNzc3nkkUcsj1u1alWtgrRly5bMmTOHRYsWcfToUXr27Mn06dNxc3OrtF1+fj6TJk3i0KFDdO7cmUaNGlU4hoceesjy86+PITs7m5YtW1oe33///Zafc3Jy+Prrr1m7di0ARUVF9OvXr8pjEBERERGRustqNzUqLS2lU6dOLF68GLhaMBYUFGBn95+UGjdufE07T09P9uzZY3l89OhRXn75ZctQ0l967f5bcnIye/bsIS0tDWdnZz7++OMK15feqN0vTCYT5eXl1T/ASnh4eODn52fpES4rK+PSpUsArFq1iry8PP7+97/j4ODAggULyMvLq3ae1+Pm5kZubq7l8enTp6vVLjs7G7PZTHx8POfOneOll14iOjqaqVOnAld7jeHq7870q6+MoqKicHNz46uvvsJkMvHSSy9ViHujY/D09CQrK8vy+NNPP2X37t288cYbeHh4EBgYyIABA4Crvba19cWBiIiIiIhYh9WmfenVqxenTp1i//792Nra8tlnnxESElJl0Td48GD27dtHfHw8p0+fJiYmBjc3N0txdCOFhYUAnDt3jrS0NGJiYm6qwGzdujXp6enk5uaya9euare7niFDhrB3716OHz8OXC1CIyIiKuSZn59PUlISa9asqXEh3LdvX5KSkvjHP/7Bt99+y/r166vV7l//+hfjx49n3759XLp0CZPJVKGn86677sLJyYnt27dz8uRJy02NCgsLKSsr4+eff+ajjz5i69at1TqG4cOH88EHH7B3716OHDnCihUruOeee4Crw583bdrExYsXuXz5MtOmTatwba2IiIiIiJFMdXSp76zWQ+rq6kp0dDSzZ89m8uTJtGvXjpiYmAo9pNfTsmVLoqOjmTdvHnPmzOGhhx5i7ty5Ve4vICCA1NRUBg0aRPv27Rk5ciRr1qyhqKioWvmGh4cTHh7OqlWr6Ny5M927d69Wu+tp1aoVkZGRREZGcuLECTp37mzpKR41ahT/+Mc/ePzxx/Hy8iIwMLDG858+9thj/Pjjj4SFhdG0aVP69u1rKYYr06NHD0aOHMlLL73EhQsX8Pb25rnnnrOst7e3Z86cOcyYMYMLFy7wzDPP4OXlRVhYGK+++ioDBw7k0UcfZdCgQde9s+9/Gzx4MD///DOvvPIKRUVF+Pv786c//QmAoUOHkpuby7PPPktBQQH9+vXjz3/+862fFBERERERsTpTeW2NQxWp4z7al1X1RjVQavA/pfivcwyNX1JaVvVGNZDz80XDYjs62hoWG2B+wAOGxv9ds5sfin8zdhz92dD4Zy+XGBq/yODXZn3+FCwzOHdbg8dR2dTz7/Y3HzDu39a0/u0Niw3wQ955Q+MbbeuPeVVvVAN5BdXrsLhV22NXGRqfJu6GhY5Z9CfDYgOM6XaPofFr4uAp4/6WqYkOzZ2tnUKNWK2HtL47deoUQ4cOve46X19f3nrrrd8sl71791boufy1J554wjIcWEREREREblH9/g6tzlJBeovuvvtuEhISrruuUaNGv2kuDzzwwA1zcXau39+YiIiIiIhIw6WC9BbZ2dlVmKLEmhwdHetMLiIiIiIiItWlglRERERERKQKJo3ZNYTVpn0RERERERGR25sKUhEREREREbEKDdkVERERERGpgkkjdg2hglRuG0bPZehkb+xcmHc4Oxgav7DoiqHxGzUy7u3GwcHYc194xdhzU3TF2Nemg42xg2Ec7er3YJsyAyciNXqeUKPnP7Y1+K8vG4P/uDN+nlbjDsDo94XGdsa+bzZ1NPYzy87gSXLNnq6Gxt9u4DyhAFw4Y1jo0no8d7PUTfX7rwgRERERERGpt9RDKiIiIiIiUgWN2DWGekhFRERERETEKlSQioiIiIiIiFVoyK6IiIiIiEhVNGbXEHWyhzQ+Pp7g4GBrp1GrrndM1jrOupSLiIiIiIjcvupkQWokPz8/du/ebe00ABgyZAixsbHWTgO4tVyysrIwm80GZSQiIiIiIg2dhuxakYODAw4Oxs7TVV11KRcRERERkbrGpDG7hqh2D2lwcDARERH06tWLSZMmMXXqVHx8fEhNTWX//v2MGDGCrl278sILL3DhwoUK7eLj41m5ciV9+vRh27ZtlnW7du3C398fb29vQkJCyM7OrrDP9evX4+vrS/fu3fn8888tz6ekpDBgwAC8vLwIDg4mJycH+M+w0+u1GzduHGazmZMnTzJq1CjMZjNxcXFVHrefnx/Tpk3j0UcfZeHChYSGhvLII49w4MABAHbs2IG/vz8+Pj68/vrrFBcXW9q+/fbbPPLII/Tv35/vv//+mtg3Gia7Zs0aevXqhbe3N2FhYRQUFAAQFRXFpEmTWLZsGT4+PvTp04e9e/dWeQw1yWXFihX06NGDLl26MHHiRMvxPfDAA/Tt2xcAs9mM2Wzmm2++sbR766238PX1xcfHh4iICEpLSwGYNGkSS5YsYebMmXh7ezNo0CCOHDliaff+++/Tu3dvHn74YaZPn05JSQkA5eXlLF++nD59+tCjRw8++OCDah23iIiIiIjUXTc1ZDczM5OpU6eyceNG2rdvT+/evdm2bRvjx4+nV69eJCUlcenSJSIjIyu0W7duHV999RWzZ8/G29sbuDrcMzQ0lLFjx7J582ZcXV2ZNWuWpc3hw4fZsmULq1evZtiwYZaYZ8+eZeLEiYSGhpKSkkLTpk2Jjo6usl1UVBQZGRl4enoSGxtLRkYGY8aMqdZxFxQUEBYWxvLlyxk+fDjt2rUjPT2dzMxMwsLCGD16NPHx8Xz33XcsX74cgG3btvHBBx8QFRXF/PnzSUpKqta+fvzxR2bPns28efPYvHkzeXl5rF692rI+LS2NzMxMNm7cSJcuXXjzzTerjHmruRw5coRFixbx5ptvsnHjRo4fP058fDwA//d//0diYiIAGRkZZGRk8MADDwCQmprK+++/z/Lly4mPjycjI4MtW7ZY4q5btw4nJyeSkpJwc3PjnXfeAWDTpk28++67/PWvf2XNmjVkZGTw8ccfA5CYmEhcXByLFy8mKiqKJUuWVLsYFxERERGRuummhuwOGTKE++67D4Ann3ySs2fPEhMTw5133snzzz+PyWRizJgxhIeHV2hXWFjIRx99hL29veW55ORkfHx8GD58OADh4eEcPHiwQpv58+fj7u7OiBEjWLFiBQDOzs58+eWXODs7c+DAAUpKSjh27FiV7ZycnACwsbHByckJV1fXah93QEAAjo6OuLu7079/f7Zt28aVK1dITk6mY8eOBAYGAhAUFMSGDRsICwvjiy++wN/fn27dugEQGBjI/v37q9xXmzZt2LlzJ/b29uzfv5/y8vIKx2dra8vs2bNxdHRk2LBhTJs2rcqYt5qLo6MjAMXFxXh6evK3v/3Nsq5Jkya4uLgAXHMuH374YVJTUyktLeWbb77B1taWo0ePWtZ7eHjw6quvAldfU8nJyQB88sknjB49Gh8fHwAWLlxo6VlNSEjgySeftHyh0adPH7Zv327ZVkRERETESCaN2DXETRWkvxQov/7Zzs6OvLw8S7FTVlbGxYsXKSoqsmwTFBRUoRgFyM7OpkWLFpbHHh4eeHh4WB63bdsWd3d3gApty8vLWbRoEVu3bqVdu3a4uLhQVlZWZbua+OU4fn38ADk5OXz//feWoqi0tNRS+Obm5vLII49Ytm3VqlW1isDLly8zZcoUMjIy6NChA7a2thWOz8vLy5JHdY/vVnNp2bIlc+bMYdGiRRw9epSePXsyffp03NzcKm2Xn5/PpEmTOHToEJ07d6ZRo0YVjuGhhx6y/PzrY8jOzqZly5aWx/fff7/l55ycHL7++mvWrl0LQFFREf369avyGEREREREpO6q8U2NSktL6dSpE4sXLwauFowFBQXY2f0ndOPGja9p5+npyZ49eyyPjx49yssvv2wZEvpL79t/S05OZs+ePaSlpeHs7MzHH39c4frSG7X7hclkory8vPoHWAkPDw/8/PwsPcJlZWVcunQJADc3N3Jzcy3bnj59uloxV61aRV5eHn//+99xcHBgwYIF5OXlWdZXdXzXc6u5ZGdnYzabiY+P59y5c7z00ktER0czdepU4GpvM1z9nZt+9ZVRVFQUbm5ufPXVV5hMJl566aUKcW90DJ6enmRlZVkef/rpp+zevZs33ngDDw8PAgMDGTBgAHC117a2vnAQERERERHrqPG0L7169eLUqVPs378fW1tbPvvsM0JCQqos+gYPHsy+ffuIj4/n9OnTxMTE4ObmZilybqSwsBCAc+fOkZaWRkxMzE0VmK1btyY9PZ3c3Fx27dpV7XbXM2TIEPbu3cvx48eBq8VkREQEAH379iUpKYl//OMffPvtt6xfv75aMX85vvz8fJKSklizZk2NC+hbzeVf//oX48ePZ9++fVy6dAmTyVShp/Ouu+7CycmJ7du3c/LkSctNjQoLCykrK+Pnn3/mo48+YuvWrdU6huHDh/PBBx+wd+9ejhw5wooVK7jnnnuAq8OmN23axMWLF7l8+TLTpk2rcG2tiIiIiIiRTHV0qe9q3EPq6upKdHQ0s2fPZvLkybRr146YmJgKPaTX07JlS6Kjo5k3bx5z5szhoYceYu7cuVXuLyAggNTUVAYNGkT79u0ZOXIka9asoaioqFr5hoeHEx4ezqpVq+jcuTPdu3evVrvradWqFZGRkURGRnLixAk6d+5s6Sl+7LHH+PHHHwkLC6Np06b07dvXUrhWZtSoUfzjH//g8ccfx8vLi8DAwBrPm3qrufTo0YORI0fy0ksvceHCBby9vXnuuecs6+3t7ZkzZw4zZszgwoULPPPMM3h5eREWFsarr77KwIEDefTRRxk0aNB17+z73wYPHszPP//MK6+8QlFREf7+/vzpT38CYOjQoeTm5vLss89SUFBAv379+POf/3zrJ0VERERERKzOVF5b41dF6rgVezINje9kb2to/M0H/21o/MKiK4bGP33momGxHRyMPfeT+v/O0Pj3Nav+TdZuxdcn8w2Nf664xND4RVfKqt6oBsoM/BgsM/gTttTgj3Bbg+/gYWPwV/tGn/8t350xLPb/9mprWGyA7MJLhsZv6mjs3Oarv63e5Ue36n+cjL0sKOavaw2NzwXjXpvL3gmveqMaGPfQPYbGr4kjucb+u7lVbe++9vLI+qTGPaT13alTpxg6dOh11/n6+vLWW2/9xhndvL1791boufy1J554wjKMWEREREREpC657QvSu+++m4SEhOuua9So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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 164
  },
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-09-19T12:58:21.073669Z",
     "start_time": "2024-09-19T12:58:20.824622Z"
    }
   },
   "source": [
    "\n",
    "# ------------------------------------  第六部分 模型评价  --------------------------------------#\n",
    "# 绘制 ROC曲线\n",
    "from sklearn import metrics\n",
    "import matplotlib.pyplot as plt\n",
    "# fpr假正率，tpr召回率，thresholds阈值，pos_label（设置正样本值）默认为None（标签数据为二分类的情况）\n",
    "fpr, tpr, thresholds = metrics.roc_curve(y_test, y_predict, pos_label=1)\n",
    "roc_auc = metrics.auc(fpr, tpr)  # auc为Roc曲线下的面积\n",
    "plt.plot(fpr, tpr, 'r')  # 绘制ROC曲线\n",
    "axline = np.array([0.,0.2,0.4,0.6,0.8,1.0])  # 斜线参考线坐标\n",
    "plt.plot(axline,axline,'gray',linestyle='--',alpha=0.5)\n",
    "plt.grid(b=True,axis='both',alpha=0.3)  # 显示网格\n",
    "plt.xlim([-0.05, 1.05])  # 设置x轴刻度范围\n",
    "plt.ylim([-0.05, 1.05])  # 设置y轴刻度范围\n",
    "plt.xlabel('FPR')  # x轴是False Positive Rate\n",
    "plt.ylabel('TPR')  # y轴是True Positive Rate\n",
    "plt.title('AUC = %0.2f' % roc_auc)\n",
    "plt.show()\n"
   ],
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "keyword grid_b is not recognized; valid keywords are ['size', 'width', 'color', 'tickdir', 'pad', 'labelsize', 'labelcolor', 'labelfontfamily', 'zorder', 'gridOn', 'tick1On', 'tick2On', 'label1On', 'label2On', 'length', 'direction', 'left', 'bottom', 'right', 'top', 'labelleft', 'labelbottom', 'labelright', 'labeltop', 'labelrotation', 'grid_agg_filter', 'grid_alpha', 'grid_animated', 'grid_antialiased', 'grid_clip_box', 'grid_clip_on', 'grid_clip_path', 'grid_color', 'grid_dash_capstyle', 'grid_dash_joinstyle', 'grid_dashes', 'grid_data', 'grid_drawstyle', 'grid_figure', 'grid_fillstyle', 'grid_gapcolor', 'grid_gid', 'grid_in_layout', 'grid_label', 'grid_linestyle', 'grid_linewidth', 'grid_marker', 'grid_markeredgecolor', 'grid_markeredgewidth', 'grid_markerfacecolor', 'grid_markerfacecoloralt', 'grid_markersize', 'grid_markevery', 'grid_mouseover', 'grid_path_effects', 'grid_picker', 'grid_pickradius', 'grid_rasterized', 'grid_sketch_params', 'grid_snap', 'grid_solid_capstyle', 'grid_solid_joinstyle', 'grid_transform', 'grid_url', 'grid_visible', 'grid_xdata', 'grid_ydata', 'grid_zorder', 'grid_aa', 'grid_c', 'grid_ds', 'grid_ls', 'grid_lw', 'grid_mec', 'grid_mew', 'grid_mfc', 'grid_mfcalt', 'grid_ms']",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[92], line 11\u001B[0m\n\u001B[0;32m      9\u001B[0m axline \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39marray([\u001B[38;5;241m0.\u001B[39m,\u001B[38;5;241m0.2\u001B[39m,\u001B[38;5;241m0.4\u001B[39m,\u001B[38;5;241m0.6\u001B[39m,\u001B[38;5;241m0.8\u001B[39m,\u001B[38;5;241m1.0\u001B[39m])  \u001B[38;5;66;03m# 斜线参考线坐标\u001B[39;00m\n\u001B[0;32m     10\u001B[0m plt\u001B[38;5;241m.\u001B[39mplot(axline,axline,\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mgray\u001B[39m\u001B[38;5;124m'\u001B[39m,linestyle\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m--\u001B[39m\u001B[38;5;124m'\u001B[39m,alpha\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.5\u001B[39m)\n\u001B[1;32m---> 11\u001B[0m plt\u001B[38;5;241m.\u001B[39mgrid(b\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m,axis\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m,alpha\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.3\u001B[39m)  \u001B[38;5;66;03m# 显示网格\u001B[39;00m\n\u001B[0;32m     12\u001B[0m plt\u001B[38;5;241m.\u001B[39mxlim([\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m0.05\u001B[39m, \u001B[38;5;241m1.05\u001B[39m])  \u001B[38;5;66;03m# 设置x轴刻度范围\u001B[39;00m\n\u001B[0;32m     13\u001B[0m plt\u001B[38;5;241m.\u001B[39mylim([\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m0.05\u001B[39m, \u001B[38;5;241m1.05\u001B[39m])  \u001B[38;5;66;03m# 设置y轴刻度范围\u001B[39;00m\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\pyplot.py:3144\u001B[0m, in \u001B[0;36mgrid\u001B[1;34m(visible, which, axis, **kwargs)\u001B[0m\n\u001B[0;32m   3137\u001B[0m \u001B[38;5;129m@_copy_docstring_and_deprecators\u001B[39m(Axes\u001B[38;5;241m.\u001B[39mgrid)\n\u001B[0;32m   3138\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mgrid\u001B[39m(\n\u001B[0;32m   3139\u001B[0m     visible: \u001B[38;5;28mbool\u001B[39m \u001B[38;5;241m|\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m,\n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m   3142\u001B[0m     \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs,\n\u001B[0;32m   3143\u001B[0m ) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[1;32m-> 3144\u001B[0m     gca()\u001B[38;5;241m.\u001B[39mgrid(visible\u001B[38;5;241m=\u001B[39mvisible, which\u001B[38;5;241m=\u001B[39mwhich, axis\u001B[38;5;241m=\u001B[39maxis, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axes\\_base.py:3196\u001B[0m, in \u001B[0;36m_AxesBase.grid\u001B[1;34m(self, visible, which, axis, **kwargs)\u001B[0m\n\u001B[0;32m   3194\u001B[0m _api\u001B[38;5;241m.\u001B[39mcheck_in_list([\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mx\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124my\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m], axis\u001B[38;5;241m=\u001B[39maxis)\n\u001B[0;32m   3195\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m axis \u001B[38;5;129;01min\u001B[39;00m [\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mx\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m]:\n\u001B[1;32m-> 3196\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mxaxis\u001B[38;5;241m.\u001B[39mgrid(visible, which\u001B[38;5;241m=\u001B[39mwhich, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[0;32m   3197\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m axis \u001B[38;5;129;01min\u001B[39;00m [\u001B[38;5;124m'\u001B[39m\u001B[38;5;124my\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m]:\n\u001B[0;32m   3198\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39myaxis\u001B[38;5;241m.\u001B[39mgrid(visible, which\u001B[38;5;241m=\u001B[39mwhich, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axis.py:1697\u001B[0m, in \u001B[0;36mAxis.grid\u001B[1;34m(self, visible, which, **kwargs)\u001B[0m\n\u001B[0;32m   1694\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m which \u001B[38;5;129;01min\u001B[39;00m [\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mmajor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m]:\n\u001B[0;32m   1695\u001B[0m     gridkw[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mgridOn\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m (\u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_major_tick_kw[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mgridOn\u001B[39m\u001B[38;5;124m'\u001B[39m]\n\u001B[0;32m   1696\u001B[0m                         \u001B[38;5;28;01mif\u001B[39;00m visible \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;28;01melse\u001B[39;00m visible)\n\u001B[1;32m-> 1697\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mset_tick_params(which\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mmajor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mgridkw)\n\u001B[0;32m   1698\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstale \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mTrue\u001B[39;00m\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axis.py:958\u001B[0m, in \u001B[0;36mAxis.set_tick_params\u001B[1;34m(self, which, reset, **kwargs)\u001B[0m\n\u001B[0;32m    945\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m    946\u001B[0m \u001B[38;5;124;03mSet appearance parameters for ticks, ticklabels, and gridlines.\u001B[39;00m\n\u001B[0;32m    947\u001B[0m \n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m    955\u001B[0m \u001B[38;5;124;03m    gridlines.\u001B[39;00m\n\u001B[0;32m    956\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m    957\u001B[0m _api\u001B[38;5;241m.\u001B[39mcheck_in_list([\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mmajor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mminor\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mboth\u001B[39m\u001B[38;5;124m'\u001B[39m], which\u001B[38;5;241m=\u001B[39mwhich)\n\u001B[1;32m--> 958\u001B[0m kwtrans \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_translate_tick_params(kwargs)\n\u001B[0;32m    960\u001B[0m \u001B[38;5;66;03m# the kwargs are stored in self._major/minor_tick_kw so that any\u001B[39;00m\n\u001B[0;32m    961\u001B[0m \u001B[38;5;66;03m# future new ticks will automatically get them\u001B[39;00m\n\u001B[0;32m    962\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m reset:\n",
      "File \u001B[1;32mD:\\Anaconda\\Lib\\site-packages\\matplotlib\\axis.py:1102\u001B[0m, in \u001B[0;36mAxis._translate_tick_params\u001B[1;34m(kw, reverse)\u001B[0m\n\u001B[0;32m   1100\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m key \u001B[38;5;129;01min\u001B[39;00m kw_:\n\u001B[0;32m   1101\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m key \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;129;01min\u001B[39;00m allowed_keys:\n\u001B[1;32m-> 1102\u001B[0m         \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m   1103\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mkeyword \u001B[39m\u001B[38;5;132;01m%s\u001B[39;00m\u001B[38;5;124m is not recognized; valid keywords are \u001B[39m\u001B[38;5;132;01m%s\u001B[39;00m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   1104\u001B[0m             \u001B[38;5;241m%\u001B[39m (key, allowed_keys))\n\u001B[0;32m   1105\u001B[0m kwtrans\u001B[38;5;241m.\u001B[39mupdate(kw_)\n\u001B[0;32m   1106\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m kwtrans\n",
      "\u001B[1;31mValueError\u001B[0m: keyword grid_b is not recognized; valid keywords are ['size', 'width', 'color', 'tickdir', 'pad', 'labelsize', 'labelcolor', 'labelfontfamily', 'zorder', 'gridOn', 'tick1On', 'tick2On', 'label1On', 'label2On', 'length', 'direction', 'left', 'bottom', 'right', 'top', 'labelleft', 'labelbottom', 'labelright', 'labeltop', 'labelrotation', 'grid_agg_filter', 'grid_alpha', 'grid_animated', 'grid_antialiased', 'grid_clip_box', 'grid_clip_on', 'grid_clip_path', 'grid_color', 'grid_dash_capstyle', 'grid_dash_joinstyle', 'grid_dashes', 'grid_data', 'grid_drawstyle', 'grid_figure', 'grid_fillstyle', 'grid_gapcolor', 'grid_gid', 'grid_in_layout', 'grid_label', 'grid_linestyle', 'grid_linewidth', 'grid_marker', 'grid_markeredgecolor', 'grid_markeredgewidth', 'grid_markerfacecolor', 'grid_markerfacecoloralt', 'grid_markersize', 'grid_markevery', 'grid_mouseover', 'grid_path_effects', 'grid_picker', 'grid_pickradius', 'grid_rasterized', 'grid_sketch_params', 'grid_snap', 'grid_solid_capstyle', 'grid_solid_joinstyle', 'grid_transform', 'grid_url', 'grid_visible', 'grid_xdata', 'grid_ydata', 'grid_zorder', 'grid_aa', 'grid_c', 'grid_ds', 'grid_ls', 'grid_lw', 'grid_mec', 'grid_mew', 'grid_mfc', 'grid_mfcalt', 'grid_ms']"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 92
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-19T12:58:25.764264Z",
     "start_time": "2024-09-19T12:58:24.616871Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ------------------------------------  第七部分 模型应用  --------------------------------------#\n",
    "# 预测给定的测试集\n",
    "pre_test = new_test_data[features]\n",
    "result = GBC_model.predict_proba(pre_test)[:,1]\n",
    "test_result = new_test_data[['User_id','Coupon_id','Date_received']]\n",
    "test_result['Probability'] = result\n",
    "# 查看描述性结果\n",
    "test_result['Probability'].describe()\n",
    "test_result.to_csv('./new_sample_submission.csv',index=None,header=None)"
   ],
   "id": "343cfe3865c59f55",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1184\\153430978.py:6: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  test_result['Probability'] = result\n"
     ]
    }
   ],
   "execution_count": 93
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
